我想用PyMC估计有向贝叶斯网的参数。我遇到了一个实现sprinkler network的特定示例,它有3个随机变量和为每个节点定义的条件概率分布(CPD)。
但是,此示例使用确定性变量编码CPD。
是否有可能将2或3个随机变量的联合或边际分布作为观测数据提供给确定性PyMC变量? 换句话说,如果我的网络形式为X - &gt; Z < - Y,是否可以提供一组形式为'x1,y1,z1&#39;的元组。作为观察数据,要学习CPD的参数(Z | X,Y)?
答案 0 :(得分:2)
洒水器示例实际上是设置&#34;静态&#34;概率值。在这一行:
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是bernoulli分布。 对于(X,Y)的每个值,即:(0,0),(0,1),(1,0),(1,1),我们有参数p1,p2,p3,p4。然后Z有4个pymc观测变量:Z1带参数p1,Z2带参数p2,Z3带参数p3,Z4带参数p4。 因此:
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....
我在这里有一个相关的问题: How to use pymc to parameterize a probabilistic graphical model?