4

我需要使用不同的参数运行不同时间的 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()给出错误“跟踪”对象没有属性“摘要” 当我这样做时它工作正常m.tau.summary()

同样适用于db.logp

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

4

1 回答 1

4

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

于 2014-05-28T21:45:09.077 回答