有人知道贝叶斯网络(loopy)信念的和积算法的工作代码示例吗?我已经在地球上冲了几天但运气不好。我对它所使用的语言无动于衷。
我在这个主题上找到的所有文件都充满了神秘而荒谬的数学说法。它似乎不是一个困难的算法,但我不能确定,因为一些棘手的位被掩盖了这么多。
或者,使用实数(而不是变量名)的示例也可能会起到作用。
答案 0 :(得分:2)
我处于类似情况。我正在使用Christopher M. Bishop的“模式识别和机器学习”一书进行理论介绍,尽管我确实想在其他一些环境中使用该算法。关于“max-product”和“sum-product”的章节描述了信念传播,尽管它是非常数学的。
我仍然在寻找一个小数字例子,所以如果你找到一个我会非常感兴趣的话。
与此同时,您可以查看libDAI,这是一个实现BP的开源库。
答案 1 :(得分:2)
我为贝叶斯网络实现了Pearl的置信传播算法。它也支持循环传播,因为当知情信念值收敛到0.001以内时它将终止。
所有代码都是Java代码,可以在我的Google code pen-ui svn repo.
中找到这并未明确制作因子图。
“支持”类有一个主要功能,以及一些可以创建小网络的静态方法。特别是我实施了在那不勒斯的书中找到的三节点Burlar-FreightTruck-Alarm网络,我的数据结账了。 (除此之外没有任何承诺!)
答案 2 :(得分:0)
我在Clojure中实现了因子图/置信传播算法,但代码还没有准备好。 (我的代码也将贝叶斯网络从命题逻辑提升到一阶/高阶逻辑。)
无论如何,我想分享一些提示:
首先,请注意,即使边缘化表示为求和,其属性也不同于求和。特别是,它与概率表的产品(称为电位)通信。这就是为什么在数学推导中,可以交换总和和产品,而在普通算术中它们不能交换。
请注意,在Pearl的算法中,上游和下游的消息是不同的 - 可能性在上游,概率在下游。 (这就是贝叶斯规则在推导信念传播中起作用的原因)。
在因子图算法中,消息是CPT(条件概率表),例如P(A | K)。 P(A | K)和P(K | A)和P(A,K)的CPT包含基本相同的信息。在终端节点,我们必须边缘化以及在适当的变量上调整CPT。这似乎在数学符号中模糊不清。