贝叶斯网络的D-separation详解和Python代码实现
D分离(D-Separation)又被称作有向分离,是一种用来判断变量是否条件独立的图形化方法。相比于非图形化方法,D-Separation更加直观且计算简单。对于一个DAG(有向无环图),D-Separation方法可以快速的判断出两个节点之间是否是条件独立的。
了解 D 分离
在贝叶斯网络中,D 分离到底是什么,它可以用于什么?简单地说,它是一种常规的确定独立性的方法。如果两个变量X 和 Y 在有向图中相对于另外一组变量 Z 是 d 分离的,那么在这种图可以表示的所有概率分布中都是独立于 Z 的。这是什么意思?这意味着两个变量X和Y在Z上是独立的,如果一旦你知道了Z,那么关于X的知识是不会给你关于Y的任何额外信息的。
要完全理解它是如何完成的,首先需要介绍 active 和 inactive trails 。如果一条路径存在依赖关系,就可以说它是 active。例如,两个变量 X 和 Y 可能通过图中的多个路径连接。如果没有任何路径处于active状态,则 X 和 Y 是 d 分隔的。让我们看一下四种不同的情况,并确定那些是处于active 状态:
Case1:在这种情况下,我们相信X可以通过Z来影响Y。但是如果观察到Z,X不会通过Z影响Y,因为Z已知。
Case2:这种情况与上面是对称的:如果观察到Z,X不能通过Z影响Y,但是如果没有观察到Z,X可以通过Z影响Y。
Case3:当且仅当Z没有被观察到时,X可以通过Z影响Y
Case4:如果Z没有被观察到,X就不能影响Y。这也被称为v形结构。
所有这些分析可以用以下方式总结:
可达性分析(RA)算法
我们现在可以考虑另一种算法,所谓的可达算法(Reachable Algorithm),它用于从给定Z的active路径寻找X可达的节点。算法由:
为了一步一步地理解算法。从算法的输入开始:
输入很好理解,然后该算法将返回从 X 可到达的所有节点。这部分是通过两个阶段来实现的:
- 阶段 1:这是算法的简单部分——找到 Z 中包含的所有节点的祖先。
- 阶段 2:从 X 开始,找到可达节点——哪些节点可以直接从 X 到达,然后哪些节点可以从这些节点到达。然后循环这个过程。
为了将这个步骤可视化,假设有一个一下的贝叶斯网络:
可以从解决这个问题开始:
完整文章:
https://www.overfit.cn/post/7247991e27a74d7da6ae97c87a89eb6f