了解pymc3包的参数

Understanding the parameters of pymc3 package

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

不过,我遇到了 pm.sample 的附加参数,可以提供给类似 chains=1, tune=1000, and draws=1000 的参数。在上面的文档中没有提到这 3 个参数。

任何人都可以帮助我理解这 3 个参数,例如它们解决的目的,它们的值如何影响后验分布收敛的准确性等。

任何指点将不胜感激。

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

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

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

其他读物

  1. Markov chains on Wikipedia
  2. Markov Chain Monte Carlo on Wikipedia