【问题标题】:plotting figure from saved traces in pymc从 pymc 中保存的跟踪中绘制图形
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 啊,我以为你在使用 pymc.Matplot.plot 函数。您需要从加载的数据库中访问跟踪,并绘制它们(通过您希望的任何方式)。
  • 您能否举个例子说明一下,我不需要再次采样。
  • 感谢您对使用绘图功能的回复,我也想使用logp而不再次采样,以便获得后验的对数概率进行比较。
  • 恐怕你做不到。后端只保存采样值,而不是其关联的对数概率值。你可以这样做的唯一方法是在你的模型中创建一个返回对数概率的确定性节点;那么它将被保存为跟踪中的一个值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
相关资源
最近更新 更多