【发布时间】:2015-02-13 05:26:39
【问题描述】:
我正在尝试使用 pymc 2 为一个简单的概率编程示例建模。我一直在使用其他语言,例如 Church 和 Anglican,并且能够轻松地建模这个问题。但是,我似乎无法在 Python 中弄清楚。
这里是code in Anglican,我认为这很不言自明:
[assume a (- (poisson 100) 100)]
[assume b (- (poisson 100) 100)]
[observe (normal (+ a b) .00001) 7]
[predict (list a b)]
使用 Metropolis-Hastings 采样器,我得到:
1 (10 1)
2 (10 8)
9977 (7 0)
20 (7 1)
使用粒子吉布斯,我得到:
669 (-1 8)
71 (-10 17)
66 (-11 18)
208 (-12 19)
19 (-13 20)
84 (-14 21)
72 (-15 22)
441 (-2 9)
...and so on...
我正在尝试像这样在 pymc 中对此进行建模:
def make_model():
a = (pymc.Poisson("a", 100) - 100)
b = (pymc.Poisson("b", 100) - 100)
precision = pymc.Uniform('precision', lower=.0001, upper=1.0)
@pymc.deterministic
def mu(a=a, b=b):
return a+b
y = pymc.Normal("y", mu=mu, tau=precision, observed=True, value=7)
return pymc.Model(locals())
def run_mcmc(model):
mcmc = pymc.MCMC(model)
mcmc.sample(5000, burn=1000, thin=2)
return mcmc
result = run_mcmc(make_model())
pymc.Matplot.plot(result)
我得到了 a 和 b 大约为 100 的轨迹。但是,如果我运行 (pymc.Poisson("a", 100) - 100).value,我得到的数字更接近于 0。
我在这里遗漏了什么吗?我对这些可能性感到兴奋,但现在很困惑!感谢您的帮助!
【问题讨论】:
-
您能否更详细地描述英国国教模型的输出?我不熟悉这个系统。
-
是的,它基本上是频率计数。例如
9977 (7 0)表示 a=7, b=0 在 10000 个样本中出现了 9977 次。
标签: python probability pymc