贝叶斯网络的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

posted @ 2022-03-03 09:58  deephub  阅读(416)  评论(0编辑  收藏  举报