我正在尝试比较PyMC和PyMC3的采样速度。
PyMC:
p1 = pymc.Normal('p1', 10, 0.5)
p2 = pymc.Gamma('p2', 11, 5)
p3 = pymc.Normal('p3', p1, p2)
model = pymc.Model([p1, p2, p3])
mcmc = pymc.MCMC(model)
mcmc.use_step_method(pymc.Metropolis, p1, p2, p3)
mcmc.sample(10000, progress_bar=True)这花了2.7秒
PyMC3:
with pm.Model() as model:
p1 = pm.Normal('p1', 10, 0.5)
p2 = pm.Gamma('p2', 11, 5)
p3 = pm.Normal('p3', p1, p2)
steps = pm.Metropolis(vars=[p1, p2, p3])
trace = pm.sample(10000,step=steps, progressbar=True)这花了6.6秒
这是正常的吗?我是不是错过了PyMC3的一些优化技巧?
发布于 2019-01-18 05:40:57
这很正常!PyMC3针对运行坚果进行了优化,这是一种用于连续模型的MCMC算法,其效率比大都会从分层模型中采样的效率高出一个数量级。相反,pymc是用fortran编写的,它提供了比pymc3中的jitted代码更快的速度,并且可能更关心像Metropolis这样的算法。
https://stackoverflow.com/questions/53949426
复制相似问题