PyMC3中的链是什么?
问题:PyMC3中的链是什么? 我正在学习用于贝叶斯建模的 PyMC3。您可以使用以下方法创建模型和样本: 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.Da
问题:PyMC3中的链是什么?
我正在学习用于贝叶斯建模的 PyMC3。您可以使用以下方法创建模型和样本:
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 个链:
>>> trace.nchains
2
我阅读了有关 PyMC3 的教程并查看了 API,但我不清楚链代表什么(在这种情况下,我要求从后部获取 1000 个样本,但我得到了 2 个链,每个链都有来自后部的 1000 个样本)。
采样器的链是否具有相同参数的不同运行,或者它们是否具有其他含义/目的?
解答
链是单次运行的 MCMC。因此,如果您的模型中有六个二维参数并要求 1000 个样本,您将获得 each 链的六个 2x1000 数组。
运行 MCMC 时,最好使用多个链,因为它们可以帮助诊断问题。例如,Gelman-Rubin 诊断需要多个链,如果您在PyMC3
中使用超过 1 个链,它会自动运行(使用joblib
,如果可能,它会尝试使用多个内核)。
作为何时可能需要多个链的具体示例,请考虑从多峰分布中采样。即使是NUTS
采样器也可能不会在单个链中访问这两种模式,但您可以使用多个链来诊断这一点。
请注意,PyMC3
通常会在您使用它们时组合链(例如,使用trace.get_values('my_var')
),因为它们都是有效的 MCMC 样本。这确实会导致一些令人困惑的行为,因为在大多数系统上要求 1000 个样本实际上会得到 4000 个样本,默认情况下你会得到 4 个链。
更多推荐
所有评论(0)