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


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


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

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

python - PyMC3中的嘈杂或门-LMLPHP python - PyMC3中的嘈杂或门-LMLPHP

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

最佳答案

假设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来实现)。

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

关于python - PyMC3中的嘈杂或门,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54421539/

10-12 18:24