低效的Metropolis抽样和贝叶斯网络

时间:2018-06-14 10:16:04

标签: pymc3 bayesian-networks

使用Python的PyMC3库,我想知道为什么下面的代码很好地模拟了贝叶斯rain-sprinkler网络。但是同样的方法并不适用于Monty Hall贝叶斯网络。谁能解释我为什么?

更具体地说,使用Metropolis采样方法,为什么Monty Hall问题的创建样本高度自相关而雨水喷淋网络不是?

我之前在这个thread中与PyMC3开发人员讨论过这个问题,但是我仍然没有得到它。

Monty Hall模型代码:

import pymc3 as pm
import theano
import numpy as np 

with pm.Model() as model:
    GuestDoor_prob = np.array([0.33, 0.33, 0.34]) 
    PrizeDoor_prob = np.array([0.33, 0.33, 0.34]) 
    MontyDoor_prob = np.array([[[0.0, 0.5, 0.5], [0.0, 0.0, 1.0], [0.0, 1.0, 0.0]],
                              [[0.0, 0.0, 1.0], [0.5, 0.0, 0.5], [1.0, 0.0, 0.0]],
                              [[0.0, 1.0, 0.0], [1.0, 0.0, 0.0], [0.5, 0.5, 0.0]]])

    GuestDoor = pm.Categorical('GuestDoor', p = GuestDoor_prob)
    PrizeDoor = pm.Categorical('PrizeDoor', p = PrizeDoor_prob)

    MontyDoor_prob = theano.shared(MontyDoor_prob)
    MontyDoor_0 = MontyDoor_prob[GuestDoor, PrizeDoor] 
    MontyDoor = pm.Categorical('MontyDoor', p = MontyDoor_0)

    random_number = np.random.randint(1,100000)
    tune = 5000
    trace = pm.sample(10000, njobs = 1)


    print(trace)


if __name__ == '__main__':
    print("main")

可以找到雨水喷淋模型的代码here

0 个答案:

没有答案