python-3.x - 了解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 个参数。
谁能帮我理解这三个参数,比如他们解决什么目的,他们的值如何影响后验分布收敛的准确性等。
任何指针将不胜感激。
解决方案
tune
:马尔可夫链蒙特卡罗采样器基于马尔可夫链的概念。马尔可夫链从随机分布开始,慢慢收敛到模型的分布(称为平稳分布)。因此,如果您想从模型中抽取“真实”(无偏)样本,则需要“调整”(让它收敛)链。因此,通过设置tune=1000
,您是在说 pymc3 让链收敛到您的模型的分布以进行 1000 次迭代。完成 1000 次迭代后,开始从分布中绘制。这将我们带到下一个参数draws
。draws
:此参数表示 pymc3 调整步骤完成后,您希望从模型的分布(马尔可夫链)中抽取多少样本。因此,通过设置draws=1000
,您是说 pymc3 抽取 1000 个样本。现在,有时,马尔可夫链不会收敛,您会得到有偏差的样本。如何测试你的链是否已经收敛?这将我们带到最后一个参数chains
。chains
:这个参数用来表示我们要采样多少个“链”。一世。e:要运行的马尔可夫链的数量。您可以运行多个马尔可夫链来查看该链是否收敛到其平稳分布(这是您的模型的分布),如果不是,它有多少发散?这很有用,因为如果其中一个链没有收敛,您可以使用您采样的备用链。通常建议将此参数保持大于 1,否则无法运行某些收敛检查。
其他读物
推荐阅读
- orocrm - OroPlatform:如何覆盖 datetimepicker js 小部件
- django - 使用 GCP 托管的 django 应用程序上的服务器错误
- c - 系统监视器中的 C curl 调用
- java - Eclipse/Gradle 多项目中的库行为不稳定 (UnsatisfiedLinkError)
- javascript - 为什么html元素未定义?
- machine-learning - 如何设计基于深度的分类器来预测二元问题?
- if-statement - 链接多个“if else”是否比多个连续的“if”语句更快?
- javascript - Json、javascript 和树视图
- excel - 行为空时如何强制计算 SUM
- firebase - 如何在 Flutter 中制作动态下拉按钮列表?(删除项目)