python - 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'
解决方案
从 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
./utils
from ..utils import _var_names
这绝对不是大规模的解决方案(我不是专家,但我想我们必须查看剩余导入的隐藏位置),但作为一种短期解决方法,以便能够查看您的图,您可以添加from ..util import get_default_varnames
到您的 pythonX.X/site-packages/pymc3/glm/utils 以支持绘图功能,它对我有用。
推荐阅读
- node.js - Mongoose 不在数组的 objectid 中填充 objectid
- javascript - 拼接不取消右行vuejs
- svelte - 对苗条反应性教程的困惑
- javascript - 使用 javascript 和 jQuery 在 MySql 中将值从一个表插入到另一个表
- multipartform-data - Mule 4:HTTP 请求者:如何将 multipart/form-data 作为 Mule REST 服务调用的 POST 正文发送?
- sql - 如何在redshift Postgresql中使用字符串作为列名(字符串到列名的动态转换)
- javascript - d3-xyzoom:与 webpack 一起使用时,滚动(滚轮)缩放抛出“d3-xyzoom.js:83 Uncaught TypeError: Cannot read property 'button' of null”
- ruby - 将一个范围的每个项目分配给哈希中另一个范围的每个项目
- javascript - 单击选择/选项时的 JavaScript 新选项卡
- angular - 为什么 flushMicrotasks() 和 tick() 在 fakeAsync 中不执行 setImmediate 回调?