我需要使用不同的参数多次运行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' object has no attribute 'summary'。当我执行m.tau.summary()
时,它可以正常工作。
db.logp
也是如此。
我是这个领域的新手。如果语法中有任何错误,请指正。 如果有其他方法可以重新绘制图形并获取模型的对数概率而不必再次运行mcmc,则请告诉我。
*
,该库覆盖了 matplotlib 的plot
函数。尝试导入import matplotlib.pyplot as plt
并调用plt.plot(db)
。 - mwaskom