首页 > 解决方案 > PYMC3 属性错误 get_default_varnames

问题描述

当我尝试使用 PyMC3 Plotting 时,出现以下错误:

AttributeError:模块“pymc3.glm.utils”没有属性“get_default_varnames”

这是我试图绘制的代码:

pm.plot_posterior(trace[3000:],
                  varnames=['CA_Armed_Assault_Mean', 'RUSSIAN_Armed_Assault_Mean', 'CA_Armed_Assault_STD', 'RUSSIAN_Armed_Assault_STD'],
                  color='#87ceeb')

我使用的是 3.7 版本,这是完整的堆栈跟踪:

-------------------------------------------------------------------------

AttributeError Traceback (most recent call last)
<ipython-input-31-fbec6ccc2c42> in <module>
      1 pm.plot_posterior(trace[3000:],
      2                   varnames=['CA_Armed_Assault_Mean', 'RUSSIAN_Armed_Assault_Mean', 'CA_Armed_Assault_STD', 'RUSSIAN_Armed_Assault_STD'],
----> 3                   color='#87ceeb')

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/arviz/data/io_pymc3.py in posterior_to_xarray(self)
     58     def posterior_to_xarray(self):
     59         """Convert the posterior to an xarray dataset."""
---> 60         var_names = self.pymc3.utils.get_default_varnames(  # pylint: disable=no-member
     61             self.trace.varnames,
     62             include_transformed=False)

AttributeError: module 'pymc3.glm.utils' has no attribute 'get_default_varnames'

标签: pythonattributeerrorpymc3

解决方案


从 pymc3 3.6 升级到 3.7 后,我遇到了这个问题。在我看来,来源是从 3.6 中的 pymc3/plots/traceplot 到 3.7 中的 arviz/plots/traceplot 的变化。pymc3/plots通过导入get_default_varnames 而 arviz/plots 现在导入它自己的 varname 函数from ../util./utilsfrom ..utils import _var_names

这绝对不是大规模的解决方案(我不是专家,但我想我们必须查看剩余导入的隐藏位置),但作为一种短期解决方法,以便能够查看您的图,您可以添加from ..util import get_default_varnames到您的 pythonX.X/site-packages/pymc3/glm/utils 以支持绘图功能,它对我有用。


推荐阅读