模块 'pymc3' 没有属性 'traceplot' 错误
module 'pymc3' has no attribute 'traceplot' Error
我正在尝试生成我的模型的跟踪图,但它显示 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});
然后出现以下错误:
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'
我在 windows10 并且我已经用 pip 下载了 pymc3,因为它没有包含在我下载的 anaconda 中。
由于 several versions ago,PyMC3 将绘图和统计委托给 ArviZ,并且为了方便和易于转换,原始绘图命令作为 ArviZ 方法的别名保留。
最新的 PyMC3 版本 (3.11.0) 是第一个不包含 pm.traceplot
等别名的版本。您必须使用与 PyMC3 对象一起使用的 arviz.plot_trace
。
与问题本身无关的额外注释:
- 您正在使用
pm.find_MAP
来初始化链,并且您正在手动将采样器设置为 pm.Metropolis
而不是允许 pm.sample
到 select 它自己的默认值。这样做是有原因的,本质上并没有错,但不鼓励这样做,请参阅 PyMC3 FAQs。
- PyMC3 正在过渡到使用
InferenceData
作为 pm.sample
的默认输出。我建议在 pm.sample
中设置 return_inferencedata=True
,原因如下:1) ArviZ 函数在后台转换为这种格式,您将避免这种小开销,2) InferenceData 比 MultiTrace 具有更多功能,3) PyMC3 正在过渡到 InferenceData 作为 pm.sample
的默认输出,那么为什么不开始呢?
- 您有一个
# no burn-in
评论,但是,pm.sample
返回的跟踪已经执行了长度为传递给它的 tune
参数的老化。 tune
的默认值是1000。要真正得到所有样本,看看MCMC是如何慢慢收敛到典型集的,需要使用discard_tuned_samples=False
.
一些推理数据资源:
- 推理数据概述:https://arviz-devs.github.io/arviz/getting_started/XarrayforArviZ.html
- 使用 InferenceData 示例(展示如何执行老化等):https://arviz-devs.github.io/arviz/getting_started/WorkingWithInferenceData.html
我正在尝试生成我的模型的跟踪图,但它显示 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});
然后出现以下错误:
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'
我在 windows10 并且我已经用 pip 下载了 pymc3,因为它没有包含在我下载的 anaconda 中。
由于 several versions ago,PyMC3 将绘图和统计委托给 ArviZ,并且为了方便和易于转换,原始绘图命令作为 ArviZ 方法的别名保留。
最新的 PyMC3 版本 (3.11.0) 是第一个不包含 pm.traceplot
等别名的版本。您必须使用与 PyMC3 对象一起使用的 arviz.plot_trace
。
与问题本身无关的额外注释:
- 您正在使用
pm.find_MAP
来初始化链,并且您正在手动将采样器设置为pm.Metropolis
而不是允许pm.sample
到 select 它自己的默认值。这样做是有原因的,本质上并没有错,但不鼓励这样做,请参阅 PyMC3 FAQs。 - PyMC3 正在过渡到使用
InferenceData
作为pm.sample
的默认输出。我建议在pm.sample
中设置return_inferencedata=True
,原因如下:1) ArviZ 函数在后台转换为这种格式,您将避免这种小开销,2) InferenceData 比 MultiTrace 具有更多功能,3) PyMC3 正在过渡到 InferenceData 作为pm.sample
的默认输出,那么为什么不开始呢? - 您有一个
# no burn-in
评论,但是,pm.sample
返回的跟踪已经执行了长度为传递给它的tune
参数的老化。tune
的默认值是1000。要真正得到所有样本,看看MCMC是如何慢慢收敛到典型集的,需要使用discard_tuned_samples=False
.
一些推理数据资源:
- 推理数据概述:https://arviz-devs.github.io/arviz/getting_started/XarrayforArviZ.html
- 使用 InferenceData 示例(展示如何执行老化等):https://arviz-devs.github.io/arviz/getting_started/WorkingWithInferenceData.html