【发布时间】:2014-05-28 21:37:34
【问题描述】:
我需要使用不同的参数运行不同时间的 MCMC 来检查收敛性。所以我决定保存这些痕迹,以便当我需要知道(出于比较目的)
pymc.MCMC (iter = 10000, burn = 1000, thin = 10)
我不需要重新运行它。 (这需要很多时间(我必须为许多不同的参数值做同样的事情)。
我找到了解决办法
m = MCMC([tau, rv], db='pickle', dbname='10000iter1000burn.pickle')
m.sample(iter = 10000, burn = 5000, thin = 10)
m.db.close()
所以跟踪现在保存在名为 10000iter1000burn.pickle
的数据库中现在,要加载跟踪,我执行以下操作
db = pymc.database.pickle.load('10000iter5000burn.pickle')
当我执行print db.trace('tau')[:] 时,我得到相同的输出,但是当我想要绘制图形或获取其他信息时,它失败了
plot(db) #error
plot() 至少需要 2 个参数(1 个给定) 但是当我做 plot(m) (我再次运行采样器的初始情况)时,它工作正常。
同样db.tau.summary() 给出错误 'Trace' 对象没有属性'summary'
当我做m.tau.summary()时它工作正常@
db.logp 也是如此
我是这个领域的新手。如果语法中的某处有任何错误,请纠正我。 如果有其他方法可以重新绘制图形并获得模型的对数概率而无需再次运行 mcmc,我将很高兴知道。
【问题讨论】:
-
我猜你已经从某个库中导入了
*,该库已经覆盖了 matplotlib 中的plot函数。尝试导入import matplotlib.pyplot as plt并调用plt.plot(db)。 -
是的,你是对的,但我仍然收到错误消息 TypeError: float() argument must be a string or a number
标签: python plot pickle pymc mcmc