了解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 个参数,例如它们解决的目的,它们的值如何影响后验分布收敛的准确性等。
任何指点将不胜感激。
tune
:马尔可夫链Monte Carlo采样器基于马尔可夫链的概念。马尔可夫链从随机分布开始,慢慢收敛到模型的分布(称为平稳分布)。因此,如果您想从模型中采样 "real"(无偏)样本,则需要 "tune"(让它收敛)链。因此,通过设置 tune=1000
,你说的是 pymc3 让链收敛到模型的分布,进行 1000 次迭代。完成 1000 次迭代后,开始从分布中绘制。这将我们带到下一个参数 draws
.
draws
:此参数表示 pymc3 一旦调整步骤完成,您希望从模型的分布(马尔可夫链)中抽取多少样本。因此,通过设置 draws=1000
,您表示 pymc3 绘制 1000 个样本。现在,有时,马尔可夫链不会收敛,您会得到有偏差的样本。如何测试你的链是否已经收敛?这将我们带到最后一个参数 chains
.
chains
:这个参数用来表示我们想要多少个“chains”样本。一世。 e:到运行的马尔可夫链数。你可以 运行 多个马尔可夫链来查看链是否收敛到它的平稳分布(这是你的模型的分布),如果不是,它的发散程度是多少?这很有用,因为如果其中一条链没有收敛,您可以使用您采样的备用链。通常建议将此参数保持大于 1,否则无法 运行 某些收敛检查。
其他读物
在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 个参数,例如它们解决的目的,它们的值如何影响后验分布收敛的准确性等。
任何指点将不胜感激。
tune
:马尔可夫链Monte Carlo采样器基于马尔可夫链的概念。马尔可夫链从随机分布开始,慢慢收敛到模型的分布(称为平稳分布)。因此,如果您想从模型中采样 "real"(无偏)样本,则需要 "tune"(让它收敛)链。因此,通过设置tune=1000
,你说的是 pymc3 让链收敛到模型的分布,进行 1000 次迭代。完成 1000 次迭代后,开始从分布中绘制。这将我们带到下一个参数draws
.draws
:此参数表示 pymc3 一旦调整步骤完成,您希望从模型的分布(马尔可夫链)中抽取多少样本。因此,通过设置draws=1000
,您表示 pymc3 绘制 1000 个样本。现在,有时,马尔可夫链不会收敛,您会得到有偏差的样本。如何测试你的链是否已经收敛?这将我们带到最后一个参数chains
.chains
:这个参数用来表示我们想要多少个“chains”样本。一世。 e:到运行的马尔可夫链数。你可以 运行 多个马尔可夫链来查看链是否收敛到它的平稳分布(这是你的模型的分布),如果不是,它的发散程度是多少?这很有用,因为如果其中一条链没有收敛,您可以使用您采样的备用链。通常建议将此参数保持大于 1,否则无法 运行 某些收敛检查。