2

我想使用 PyMC 估计有向贝叶斯网络的参数。我遇到了一个实现喷水器网络的特定示例,该网络具有 3 个随机变量和为每个节点定义的条件概率分布 (CPD)。

但是,此示例使用确定性变量对 CPD 进行了编码。

是否可以将 2 或 3 个随机变量的联合或边际分布作为观测数据提供给确定性 PyMC 变量?换句话说,如果我的网络是 X -> Z <- Y 的形式,是否可以提供一组形式为 'x1,y1,z1' 的元组作为观察数据,以学习 CPD 的参数( Z|X,Y)?

4

1 回答 1

2

洒水器示例实际上是在设置“静态”概率值。在这一行:

p_G = mc.Lambda('p_G', lambda S=S, R=R: pl.where(S, pl.where(R, .99, .9), pl.where(R, .8, 0.)),
            doc='Pr[G|S,R]')

据我了解,我认为我们需要为父级的每个值设置一个学习参数。所以如果我们想学习 P(Z/X,Y),我们需要为 X 和 Y 的值的每个组合,学习 Z 的一个参数集。所以假设 X 和 Y 取布尔值,Z 是伯努利分布. 对于 (X,Y) 的每个值,即:(0,0),(0,1),(1,0),(1,1) 我们有参数 p1,p2,p3,p4。然后 Z 有 4 个 pymc 观察变量:带有参数 p1 的 Z1、带有参数 p2 的 Z2、带有参数 p3 的 Z3 和带有参数 p4 的 Z4。因此:

P(Z=0/X=0,Y=0) is the mcmc estimated mean of p1. 
P(Z=1/X=0,Y=0) = 1-p1
P(Z=0/X=1,Y=0) = p2 and so on....

我在这里有一个相关的问题: 如何使用 pymc 参数化概率图形模型?

于 2016-06-07T07:04:28.650 回答