Python 从pymc中保存的记录道打印图形

Python 从pymc中保存的记录道打印图形,python,plot,pickle,pymc,mcmc,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

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

plot(db)  #error
plot()至少接受2个参数(给定1个) 但是当我绘制(m)(当我再次运行采样器时的初始情况)时,它工作得很好

类似地,
db.tau.summary()
给出错误“Trace”对象没有属性“summary” 当我执行
m.tau.summary()时,它工作正常

对于
db.logp

我是这个领域的新手。如果语法中有任何错误,请纠正我。
如果有其他方法可以在不再次运行mcmc的情况下回复该图并获取模型的日志概率,我很乐意知道。

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

我猜您是从某个库导入的
*
,该库覆盖了matplotlib中的
plot
函数。尝试导入
import matplotlib.pyplot作为plt
并调用
plt.plot(db)
。是的,您是对的,但我仍然收到错误消息TypeError:float()参数必须是字符串或数字。我以为您使用的是pymc.Matplot.plot函数。您需要从加载的数据库访问跟踪,并绘制这些跟踪(通过您希望的任何方式)。您能否用一个示例说明我不需要再次采样。感谢您关于使用绘图功能的回复,我还想在不再次采样的情况下使用logp,以便得到后验概率的对数进行比较。恐怕你做不到。后端仅保存采样值,而不保存其关联的日志概率值。这样做的唯一方法是在模型中创建一个返回日志概率的确定性节点;然后将其保存为跟踪中的值。