贝叶斯网络-如何使用PyMC估计贝叶斯网络中的参数



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

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

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

喷头的例子实际上是设置"静态"概率值。这一行:

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参数化一个概率图形模型?

最新更新