首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyMC3中的链是什么?

PyMC3中的链是什么?
EN

Stack Overflow用户
提问于 2018-04-13 21:14:22
回答 1查看 3.2K关注 0票数 20

我正在学习用于贝叶斯建模的PyMC3。您可以使用以下方法创建模型和示例:

代码语言:javascript
复制
import pandas as pd
import pymc3 as pm

# obs is a DataFrame with a single column, containing
# the observed values for variable height
obs = pd.DataFrame(...)

# we create a pymc3 model
with pm.Model() as m:
    mu = pm.Normal('mu', mu=178, sd=20)
    sigma = pm.Uniform('sigma', lower=0, upper=50)
    height = pm.Normal('height', mu=mu, sd=sigma, observed=obs)
    trace = pm.sample(1000, tune=1000)

pm.traceplot(trace)

当我检查trace (在本例中是来自后验概率的1000个样本)时,我注意到创建了2条链:

代码语言:javascript
复制
>>> trace.nchains
2

我阅读了关于PyMC3的教程并查看了API,但我不清楚链代表了什么(在这个例子中,我要求从后面获取1000个样本,但是我得到了2个链,每个链都有1000个来自后向的样本)。

这些链条是具有相同参数的采样器的不同运行方式,还是有其他意义或目的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-14 21:12:38

链是MCMC的单一运行。因此,如果模型中有6个二维参数,并要求1000个样本,那么每个链将得到6个2x1000数组。

在运行MCMC时,最好使用多个链,因为它们可以帮助诊断问题。例如,Gelman-Rubin diagnostic需要多个链,如果在PyMC3中使用多个链,则会自动运行(使用joblib,如果可能的话尝试使用多个核心)。

作为您可能需要多个链的具体示例,请考虑从多模分布中取样。即使是NUTS采样器也不能访问单链中的两种模式,但是您可以使用多个链来诊断这一点。

注意,PyMC3通常在使用它们时组合它们(例如,使用trace.get_values('my_var')),因为它们都是有效的MCMC示例。这确实导致了一些令人困惑的行为,因为在大多数系统中,要求1000个样本实际上可以得到4000条,默认情况下您会得到4条链。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49825216

复制
相关文章

相似问题

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