1
我厌倦了使用PyMC重新运行长MCMC链,因此使用链节省功能PyMC带有听起来像一个好主意。我正在使用pickle
数据库后端来感受基于磁盘保存的MCMC工作流程,并且我发现如果我尝试从连续两次使用pickle数据库的PyMC MCMC模型中进行抽样,则会调用第二个sample
是非常慢。PyMC:初始采样运行后,采用pickle数据库的MCMC采样速度令人难以置信
from pymc import MCMC
from pymc.examples import disaster_model
dbname = 'simple.pickle'
S = MCMC(disaster_model, db='pickle', dbname=dbname)
S.sample(1e4) # <-- Runs very fast
if True:
S.sample(1e4) # <-- *very slow*
S.db.close()
第一sample
调用完成几乎是瞬间,但第二个过程非常吞吞吐吐,服用几秒钟即可完成。同时,我在第二次调用sample
期间查看磁盘上的simple.pickle文件,并注意到它的大小在20到60兆之间迅速波动。
我希望第二个(以及所有后续的)调用在大约与第一个相同的时间完成,这样我就可以手动监控链条的混合属性(是的,我知道有各种各样的fancier诊断,我可以使用,但除此之外)。
我在做什么错?
PyMC 2.2版,Python 2.7.3,Ubuntu 12.10 64位。
易于从源代码构建,并且多个'sample'调用现在按预期完成。 'len(S.trace('early_mean',chain = None)[:])##> 20000' ---太棒了。 –