首页 > 解决方案 > 了解pymc3包的参数

问题描述

在 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:]

但是,我遇到了可以提供给 like 的 pm.sample 的其他参数chains=1, tune=1000, and draws=1000。在上面的文档中没有提到这 3 个参数。

谁能帮我理解这三个参数,比如他们解决什么目的,他们的值如何影响后验分布收敛的准确性等。

任何指针将不胜感激。

标签: python-3.xpymc3

解决方案


  1. tune:马尔可夫链蒙特卡罗采样器基于马尔可夫链的概念。马尔可夫链从随机分布开始,慢慢收敛到模型的分布(称为平稳分布)。因此,如果您想从模型中抽取“真实”(无偏)样本,则需要“调整”(让它收敛)链。因此,通过设置tune=1000,您是在说 pymc3 让链收敛到您的模型的分布以进行 1000 次迭代。完成 1000 次迭代后,开始从分布中绘制。这将我们带到下一个参数draws

  2. draws:此参数表示 pymc3 调整步骤完成后,您希望从模型的分布(马尔可夫链)中抽取多少样本。因此,通过设置draws=1000,您是说 pymc3 抽取 1000 个样本。现在,有时,马尔可夫链不会收敛,您会得到有偏差的样本。如何测试你的链是否已经收敛?这将我们带到最后一个参数chains

  3. chains:这个参数用来表示我们要采样多少个“链”。一世。e:要运行的马尔可夫链的数量。您可以运行多个马尔可夫链来查看该链是否收敛到其平稳分布(这是您的模型的分布),如果不是,它有多少发散?这很有用,因为如果其中一个链没有收敛,您可以使用您采样的备用链。通常建议将此参数保持大于 1,否则无法运行某些收敛检查。

其他读物

  1. 维基百科上的马尔可夫链
  2. 维基百科上的马尔可夫链蒙特卡洛

推荐阅读