在python的pymc3
包中,典型的模型构建工作如下(从https://nbviewer.jupyter.org/github/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/blob/master/Chapter2_MorePyMC/Ch2_MorePyMC_PyMC3导入。 ipynb -
import pymc3 as pm
import theano.tensor as T
with pm.Model() as model:
... ... ...
obs = pm.Bernoulli("obs", p, observed=occurrences)
step = pm.Metropolis()
trace = pm.sample(18000, step=step)
burned_trace = trace[1000:]
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了可以提供给 like 的 pm.sample 的其他参数chains=1, tune=1000, and draws=1000
。在上面的文档中没有提到这 3 个参数。
任何人都可以帮助我理解这 3 个参数,例如它们解决的目的,它们的值如何影响后验分布收敛的准确性等。
任何指针都将受到高度赞赏。
tune
:马尔可夫链蒙特卡罗采样器基于马尔可夫链的概念。马尔可夫链从随机分布开始,慢慢收敛到模型的分布(称为平稳分布)。因此,如果您想从模型中采样“真实”(无偏)样本,则需要“调整”(让它收敛)链。因此,通过设置tune=1000
,您是在说 pymc3 使链收敛到模型的分布 1000 次迭代。完成 1000 次迭代后,开始从分布中绘制。这将我们带到下一个参数draws
。
draws
:此参数表示 pymc3 调整步骤完成后,您希望从模型的分布(马尔可夫链)中抽取多少个样本。因此,通过设置draws=1000
,您是在说 pymc3 绘制 1000 个样本。现在,有时,马尔可夫链不收敛,您会得到有偏差的样本。如何测试你的链是否收敛?这将我们带到最后一个参数chains
。
chains
: 这个参数用来表示我们要采样多少个“链”。一世。e:要运行的马尔可夫链数。您可以运行多个马尔可夫链以查看该链是否收敛到其平稳分布(这是您模型的分布),如果不是,则发散度有多大??这很有用,因为如果其中一个链没有收敛,您可以使用您采样的备用链。通常建议将此参数保持为大于 1,否则将无法运行某些收敛检查。
归档时间: |
|
查看次数: |
411 次 |
最近记录: |