PyMC3中的嘈杂或门

时间:2019-01-29 12:52:27

标签: python theano pymc3 bayesian-networks

如Rehder(1999)所述,我正在尝试创建一个嘈杂的OR门的PyMC3模型(一个通用效果的贝叶斯网络,请参见下图):

  • a1,a2和a3中的每一个均同样可能独立地导致a4:对于i!= 4,p(a4 | ai = 1)= c。
  • 如果父节点处于关闭状态,则a4处于打开状态的概率为u。

所得的概率分布应在“共效应因果模型”下的下表中。 q是父母的无条件概率。

我当然可以轻松地对a4对其他三个随机变量的依赖性进行硬编码,但我想知道PyMC3是否具有更紧凑的方式来表达这种分离相互作用。

common-effect net enter image description here

参考:Rehder,B。(1999)。因果模型分类理论。在*认知科学学会第21届年会论文集*(pp。595-600)。

1 个答案:

答案 0 :(得分:1)

假设c是一个共享值,我想到的捕捉关系的最紧凑的方法是将a_4的概率降低到一个概率。也就是说,遵循以下原则:

import pymc3 as pm
import theano.tensor as tt

with pm.Model() as model:
    # prior probabilities
    q = pm.Beta('q', alpha=1, beta=1)
    c = pm.Beta('c', alpha=1, beta=1)
    u = pm.Beta('u', alpha=1, beta=1)

    # input nodes
    a_i = pm.Bernoulli('a_i', p=q, shape=3)

    # prob for a_4
    p = pm.math.switch(tt.any(a_i), 1.0 - (1.0 - c)**tt.sum(a_i), u)

    # output node
    a_4 = pm.Bernoulli('a_4', p=p)

    prior = pm.sample_prior_predictive(samples=1000)

如果a_i中的任何一个成功,那么我们将计算sum(a_i)次尝试(即1-(1-c)^sum(a_i))中任何成功的概率,否则只需使用u

显然,先验概率可以是固定的,也可以根据需要独立设置(例如,可能需要独立的q值,这可以通过添加shape=3来实现)。

如果这不是您想要的内容,则可以在问题中添加一些说明。