我正在尝试生成模型的跟踪图,但它显示module 'pymc3' has no attribute 'traceplot'错误。我的代码是:
with pm.Model() as our_first_model:
# a priori
theta = pm.Beta('theta', alpha=1, beta=1)
# likelihood
y = pm.Bernoulli('y', p=theta, observed=data)
#y = pm.Binomial('theta',n=n_experimentos, p=theta, observed=sum(datos))
start = pm.find_MAP()
step = pm.Metropolis()
trace = pm.sample(1000, step=step, start=start)
burnin = 0 # no burnin
chain = trace[burnin:]
pm.traceplot(chain, lines={'theta':theta_real});
Run Code Online (Sandbox Code Playgroud)
然后给出以下错误:
AttributeError Traceback (most recent call last)
<ipython-input-8-40f97a342e0f> in <module>
1 burnin = 0 # no burnin
2 chain = trace[burnin:]
----> 3 pm.traceplot(chain, lines={'theta':theta_real});
AttributeError: module 'pymc3' has no attribute 'traceplot'
Run Code Online (Sandbox Code Playgroud)
我在 windows10 上,我用 pip 下载了 pymc3,因为它没有包含在我下载的 anaconda 中。
从几个版本之前开始,PyMC3 将绘图和统计委托给 ArviZ,并且原始绘图命令保留为 ArviZ 方法的别名,以方便和轻松过渡。
最新的 PyMC3 版本 (3.11.0) 是第一个不包含别名的版本,例如pm.traceplot. 您必须使用arviz.plot_trace适用于 PyMC3 对象的方法。
与问题本身无关的额外注释:
pm.find_MAP初始化链,并且手动将采样器设置为,pm.Metropolis而不是允许pm.sample选择其自己的默认值。这样做是有原因的,本质上并没有错,但不鼓励这样做,请参阅PyMC3 常见问题解答。InferenceData作为pm.sample. 我建议出于以下原因进行设置return_inferencedata=True:pm.sample1) ArviZ 函数在后台转换为这种格式,您将避免这种小开销,2) InferenceData 比 MultiTrace 具有更多功能,3) PyMC3 正在转换为 InferenceData 作为默认输出pm.sample那么为什么不开始呢?# no burn-in评论,返回的跟踪pm.sample已经执行了传递tune给它的参数长度的预烧。的默认值为tune1000。要实际获取所有样本并查看 MCMC 如何慢慢收敛到典型集,您需要使用discard_tuned_samples=False。一些 InferenceData 资源: