首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解pymc3包的参数

理解pymc3包的参数
EN

Stack Overflow用户
提问于 2020-05-23 09:26:50
回答 1查看 1.1K关注 0票数 0

在python的pymc3包中,典型的模型构建工作如下(从PyMC3.ipynb导入)

代码语言:javascript
复制
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个参数。

请任何人帮助我理解这三个参数,比如它们的目的是什么,它们的值如何影响后验分布收敛的准确性等等。

任何指针都将受到高度赞赏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-24 11:28:18

  1. tune:马尔可夫链蒙特卡罗采样器是基于马尔可夫链的概念。马尔可夫链从随机分布开始,慢慢收敛到模型的分布(称为平稳分布)。所以,如果你想从你的模型中取样“真实的”(无偏的)样本,你需要“调优”(让它收敛)链。因此,通过设置tune=1000,您可以使用pymc3来让链在1000次迭代中收敛到模型的分布。一旦完成了1000个迭代,就开始从发行版中提取。这将带我们进入下一个参数draws
  2. draws:这个参数告诉pymc3,一旦完成调优步骤,您想从模型的分布(马尔可夫链)中抽取多少个样本。因此,通过设置draws=1000,您可以让pymc3绘制1000个样本。现在,有时,马尔可夫链不收敛,你得到有偏差的样本。如何测试您的链是否已收敛?这将带我们进入最后一个参数chains
  3. chains:这个参数用于表示我们想要采样多少个“”。i :要运行的马尔可夫链数。您可以运行多个马尔可夫链,看看该链是否收敛到其平稳分布(这是您的模型的分布),如果不是,它有多大的分歧?这是有用的,因为,如果其中一个链没有收敛,您可以使用您采样的备用链。通常建议将该参数保持在1以上,否则就不可能运行某些收敛检查。

其他读数

  1. 维基百科上的马尔可夫链
  2. 维基百科上的马尔可夫链蒙特卡罗
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61969968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档