8

有人知道贝叶斯网络(循环)信念的和积算法的工作代码示例吗?我已经在地球上搜寻了几天,但运气不佳。我对它是哪种语言无动于衷。

我在该主题上找到的所有文档都充满了晦涩难懂且模棱两可的数学语言。这似乎不是一个困难的算法,但我不能确定,因为一些棘手的部分被掩盖了太多。

或者,使用实数(而不是变量名)的示例也可能会起到作用。

4

3 回答 3

2

我也有类似的情况。我正在使用 Christopher M. Bishop 的“模式识别和机器学习”一书进行理论介绍,尽管我确实想在其他情况下使用该算法。“max-product”和“sum-product”一章描述了信念传播,尽管它是非常数学的。

我仍在寻找一个小的数值示例,所以如果你找到一个我会非常感兴趣的。

同时你可以看看libDAI,一个实现 BP 的开源库。

于 2010-03-04T15:24:49.963 回答
2

我已经为贝叶斯网络实现了 Pearl 的信念传播算法。它也支持循环传播,因为它会在知情信念值收敛到 0.001 以内时终止。

所有代码都是 Java 代码,可以在我的Google 代码 pen-ui svn repo 中找到。

这并没有明确地制作因子图。

“支持”类有一个主要功能,以及一些创建您可以玩的小型网络的静态方法。特别是我实现了在那不勒斯的书中找到的三节点 Burlar-FreightTruck-Alarm 网络,并且我的数字检查出来了。(除此之外没有任何承诺!)

于 2010-03-09T18:19:56.183 回答
0

我正在 Clojure 中实现因子图/信念传播算法,但代码尚未准备好。(我的代码还将贝叶斯网络从命题逻辑提升到一阶/高阶逻辑。)

无论如何,我想分享一些技巧:

  1. 首先,请注意,尽管边缘化被表示为求和,但其属性与求和不同。特别是,它与概率表的乘积(称为势)通勤。这就是为什么在数学推导中,和和乘积可以交换,而在普通算术中则不能。

  2. 请注意,在 Pearl 的算法中,上行和下行的消息是不同的——可能性上行,概率下行。(这就是贝叶斯规则在信念传播推导中起作用的原因)。

  3. 在因子图算法中,消息是 CPT(条件概率表),例如 P(A|K)。P(A|K) 和 P(K|A) 和 P(A,K) 的 CPT 包含基本相同的信息。在终端节点,我们必须边缘化以及在适当的变量上调节 CPT。这似乎在数学符号中被掩盖了。

于 2012-08-19T07:39:06.050 回答