使用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。