我正在通过Bayesian Analysis with Python这本书学习贝叶斯推理。但是,在使用plot_ppc时,我得到了AttributeError和警告
/usr/local/Caskroom/miniconda/base/envs/kaggle/lib/python3.9/site-packages/pymc3/sampling.py:1689: UserWarning: samples参数小于nchains乘以ndraws,一些绘制和/或链可能不会在返回的后验预测样本warnings.warn(
该模型是
shift = pd.read_csv('../data/chemical_shifts.csv')
with pm.Model() as model_g:
μ = pm.Uniform('μ', lower=40, upper=70)
σ = pm.HalfNormal('σ', sd=10)
y = pm.Normal('y', mu=μ, sd=σ, observed=shift)
trace_g = pm.sample(1000, return_inferencedata=True)如果我使用以下代码
with model_g:
y_pred_g = pm.sample_posterior_predictive(trace_g, 100, random_seed=123)
data_ppc = az.from_pymc3(trace_g.posterior, posterior_predictive=y_pred_g) # 'Dataset' object has no attribute 'report'我得到'Dataset‘对象没有属性'report’。
如果我使用以下代码
with model_g:
y_pred_g = pm.sample_posterior_predictive(trace_g, 100, random_seed=123)
data_ppc = az.from_pymc3(trace_g, posterior_predictive=y_pred_g) # AttributeError: 'InferenceData' object has no attribute 'report'我得到了报告:'InferenceData‘对象没有’AttributeError‘属性。
ArviZ版本: 0.11.2 PyMC3版本: 3.11.2 Aesara/Theano版本: 1.1.2 Python版本: 3.9.6操作系统: MacOS Big Sur您是如何安装PyMC3: conda的
发布于 2021-08-11 04:27:07
您正在将return_inferancedata=True传递给pm.sample(),根据PyMC3 documentation,它将返回InferenceData对象而不是MultiTrace对象。
return_inferencedatabool, default=False
Whether to return the trace as an arviz.InferenceData (True) object or a MultiTrace (False) Defaults to False, but we’ll switch to True in an upcoming release.然而,from_pymc3函数是expects a MultiTrace object。
好消息是from_pymc3将返回一个InferenceData对象,因此您可以通过以下两种方法之一来解决此问题:
from_pymc3调用,因为它会返回InferenceData,由于return_inferencedata=True.return_inferencedata=False (您也可以删除该参数,但是文档中声明将来它将默认为True,因此为了证明将来最好将其显式设置为False)。这将返回一个可以传递给from_pymc3.的MultiTrace
https://stackoverflow.com/questions/68735173
复制相似问题