如何使用pymc参数化概率图模型?

uda*_*dai 5 bayesian-networks pymc pymc3 probabilistic-programming

如何使用pymc参数化概率图形模型?

假设我有两个节点的PGM X和Y.让我们说X->Y是图表.

并且X采用两个值{0,1},并且 Y还采用两个值{0,1}.

我想使用pymc来学习分布的参数,并用它来填充图形模型以进行推理.

我能想到的方式如下:

X_p = pm.Uniform("X_p", 0, 1)
X = pm.Bernoulli("X", X_p, values=X_Vals, observed=True)
Y0_p = pm.Uniform("Y0_p", 0, 1)
Y0 = pm.Bernoulli("Y0", Y0_p, values=Y0Vals, observed=True)
Y1_p = pm.Uniform("Y1_p", 0, 1)
Y1 = pm.Bernoulli("Y1", Y1_p, values=Y1Vals, observed=True)
Run Code Online (Sandbox Code Playgroud)

这里Y0Vals是Y对应于X值= 0 Y1Vals的值,并且是Y对应于X值= 1的值.

计划是从这些中抽取MCMC样本,并使用Y0_p和Y1_p 填充离散贝叶斯网络的概率...所以概率表适用P(X) = (X_p,1-X_p)于P(Y/X):

  Y  0       1
X 
0   Y0_p   1-Y0_p
1   Y1_p   1-Y1_p
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 这是正确的做法吗?
  2. 这不是很笨拙,特别是如果我有X100个离散值吗?或者如果变量有两个父项X并且Y每个变量有10个离散值?
  3. 我能做些什么吗?
  4. 是否有任何好书详细介绍了我们如何进行这种互连.