使用 pymc 进行贝叶斯网络推理(初学者的困惑)

机器算法验证 贝叶斯 推理 贝叶斯网络 pymc
2022-01-31 18:28:14

我目前正在 Coursera 上参加 Daphne Koller 的 PGM 课程。在这方面,我们通常将贝叶斯网络建模为作为观察数据一部分的变量的因果有向图。但是在 PyMC 教程和示例中,我通常看到它的建模方式与 PGM 不同,或者至少我很困惑。在 PyMC 中,任何观察到的现实世界变量的父项通常是您用来对变量建模的分布参数。

现在我的问题确实是一个实际的问题。假设我有 3 个观察数据的变量(A、B、C)(假设它们都是连续变量,只是为了它)。从一些领域知识来看,可以说 A 和 B 导致 C。所以我们这里有一个 BN - A,B 是父母,C 是孩子。现在从 BN 方程 P(A, B, C) = P(C | A, B) * P(A) * P(B)

我可以说 A 和 B 是一些带有一些 mu 和 sigma 的正态分布,但是我如何建模 P(C | A, B) ?我想学习的一般想法是如何使用 PyMC 学习这个 BN,以便我可以查询 BN。或者我是否必须以某种方式使用模型的参数来增加 BN。

这个问题可以用pymc解决吗?还是我有一些基本错误?

任何帮助,将不胜感激!

1个回答

看看健康算法中的一篇文章: http ://healthyalgorithms.com/2011/11/23/causal-modeling-in-python-bayesian-networks-in-pymc/

也在 PyMC 的教程中:http: //pymc-devs.github.io/pymc/tutorial.html

也许您会尝试以下代码片段(假设您已将 pymc 导入为 mc):

A = mc.Normal('A', mu_A, tau_A)
B = mc.Normal('B', mu_B, tau_B)
p_C = mc.Lambda('p_C', lambda A=A, B=B: <<dependency spec goes here>>, doc='Pr[C|AB]')
C = mc.Bernoulli('C', p_C)