我正在尝试在PyMC3中对多个链进行采样.在PyMC2中我会做这样的事情:
for i in range(N):
model.sample(iter=iter, burn=burn, thin = thin)
Run Code Online (Sandbox Code Playgroud)
我应该如何在PyMC3中做同样的事情?我看到'sample'方法中有一个'njobs'参数,但是当我为它设置一个值时它会抛出一个错误.我想使用采样链来获得'pymc.gelman_rubin'输出.
更好的是用于njobs并行运行链:
#!/usr/bin/env python3
import pymc3 as pm
import numpy as np
from pymc3.backends.base import merge_traces
xobs = 4 + np.random.randn(20)
model = pm.Model()
with model:
mu = pm.Normal('mu', mu=0, sd=20)
x = pm.Normal('x', mu=mu, sd=1., observed=xobs)
step = pm.NUTS()
with model:
trace = pm.sample(1000, step, njobs=2)
Run Code Online (Sandbox Code Playgroud)
小智 4
要连续运行它们,您可以使用与 PyMC 2 示例类似的方法。主要区别在于每次调用都会sample返回一个多链跟踪实例(在本例中仅包含一条链)。merge_traces将获取多链实例列表并创建包含所有链的单个实例。
#!/usr/bin/env python3
import pymc as pm
import numpy as np
from pymc.backends.base import merge_traces
xobs = 4 + np.random.randn(20)
model = pm.Model()
with model:
mu = pm.Normal('mu', mu=0, sd=20)
x = pm.Normal('x', mu=mu, sd=1., observed=xobs)
step = pm.NUTS()
with model:
trace = merge_traces([pm.sample(1000, step, chain=i)
for i in range(2)])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2685 次 |
| 最近记录: |