D分离python实现

问题描述 投票:0回答:2

我对贝叶斯网络领域完全陌生。对于我的项目,我需要检查 All the possible d separation conditions existing in a 7 node dag,为此我正在寻找一些好的 python 代码。 我在编程方面的知识有限(一些数值分析和数据结构;但我对 dag 中的 d 分离,e 分离和其他概念非常了解)。

如果有人能指出在哪里可以找到这样的特定代码,那将非常有帮助。请注意,我想要一个 python 代码来检查 7 节点 dag 中 d 分离后的所有条件独立性

我会更开心 检查每条路径是否被阻塞等的算法,而不是建立在半图形公理上的算法。

我不知道我应该去哪里看或者我应该问谁,所以任何帮助将不胜感激。

python-3.x naivebayes hidden-markov-models bayesian-networks
2个回答
2
投票

我猜你明白你的需求是一个非常大的清单。即使我们只考虑 2 个变量之间的 d 分离(由一组节点决定)。

无论如何,您可以使用 pyAgrum 轻松做到这一点(https://agrum.org

import itertools
import pyAgrum as gum

# create a BN
bn=gum.fastBN("A->B<-C->D->E->F;B->E<-G");

# print the indepency model by testing d-separations

# how to iterate for each subset of an interable
def powerset(iterable):
    """
    powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)
    """
    xs = list(iterable)
    # note we return an iterator rather than a list
    return itertools.chain.from_iterable(itertools.combinations(xs,n) for n in range(len(xs)+1))

# testing every d-separation
for i in bn.names():
    for j in bn.names()-{i}:
        for k in powerset(bn.names()-{i,j}):
            if bn.isIndependent(i,j,k):
                print(f"{i} indep {j} given {k}")

结果(在笔记本中):


0
投票

我做了一个包,准确的实现了你想要的功能。真是巧合!

enter image description here enter image description here

如果您想查看完整代码或它是如何工作的,请参阅

© www.soinside.com 2019 - 2024. All rights reserved.