从pymc中保存的痕迹绘制图

时间:2014-05-28 21:37:35

标签: python plot pickle pymc mcmc

我需要使用不同的参数运行MCMC不同的时间以检查收敛。所以我决定保存这些痕迹,这样当我需要知道(为了comaprison目的)时,结果是什么?

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')[:]时,我得到相同的输出,但是当我想要tp绘制图形或获取其他信息时,它会失败

plot(db)  #error

plot()至少需要2个参数(给定1个) 但是当我绘制(m)(我再次运行采样器的初始情况)时,它工作正常。

同样db.tau.summary()会出现错误' Trace'对象没有属性'摘要' 我做m.tau.summary()

时工作正常

db.logp

也是如此

我是这个领域的新手。如果语法中有任何错误,请更正我。 如果还有其他方法可以重新绘制图形并获得模型的对数概率而不再运行mcmc,我将很高兴知道。

1 个答案:

答案 0 :(得分:4)

您不能只将数据库后端传递给绘图函数。您可以传递(1)原始节点/随机(2)跟踪对象(3)pymc节点/随机指标字典或(4)原始输出。