pymc.smc.sample_smc#

pymc.smc.sample_smc(draws=2000, kernel=<class 'pymc.smc.kernels.IMH'>, *, start=None, model=None, random_seed=None, chains=None, cores=None, compute_convergence_checks=True, return_inferencedata=True, idata_kwargs=None, progressbar=True, **kernel_kwargs)[源代码]#

基于顺序蒙特卡罗的采样。

参数:
抽取 : int, 默认 2000python:int, 默认值为 2000

从后验(即最后阶段)中抽取的样本数量。以及独立链的数量。默认为2000。

内核 : SMC 内核, 可选SMC 内核,可选

使用的SMC内核。默认为 pymc.smc.smc.IMH (独立Metropolis Hastings)

startpython:dict 或 python:dict 的数组,可选

参数空间的起始点。它应该是一个长度为 chains 的字典列表。当为 None(默认)时,起始点从先验分布中采样。

model模型(如果已在上下文中,则为可选)。
random_seedpython:int, numpy:array_like of python:int, RandomState 或 Generator, 可选

采样步骤使用的随机种子。如果传递的是一个整数列表、元组或数组,每个条目将用于为每个链设置种子。如果长度与链的数量不匹配,将引发 ValueError。

: int, 可选python:int, 可选

要采样的链的数量。运行独立的链对于某些收敛统计量很重要。如果为 None``(默认),则设置为 ``cores 或 2 中的较大值。

cores : int, 默认值 Nonepython:int, 默认 python:None

要并行运行的链数。如果为 None,则设置为系统中的 CPU 数量。

compute_convergence_checks : 布尔值,默认值 Truebool, 默认 python:True

是否计算采样器统计数据,如 R hateffective_n。默认为 True

return_inferencedata : 布尔值, 默认值 Truebool, 默认 python:True

是否将跟踪结果返回为 InferenceData (True) 对象或 MultiTrace (False)。默认为 True

idata_kwargs : dict, 可选python:dict, 可选

用于 pymc.to_inference_data() 的关键字参数。

progressbar : 布尔值,可选,默认 Truebool, 可选, 默认 python:True

是否在命令行中显示进度条。

**kernel_kwargs : dict, 可选python:dict, 可选

传递给 SMC_kernel 的关键字参数。默认的 IMH 内核接受以下关键字:

阈值浮点数,默认值为 0.5

确定从阶段到阶段的beta变化,即间接确定阶段数量,threshold 值越高,阶段数量越多。默认为0.5。应在0到1之间。

correlation_thresholdfloat, 默认值 0.01

值越低,自动计算的MCMC步数越多。默认为0.01。应在0到1之间。

其他内核的关键字参数应在各自的文档字符串中检查。

注释

SMC 通过经过连续的阶段来工作。在每个阶段,逆温度 \(\beta\) 会稍微增加一点(从 0 开始,直到 1)。当 \(\beta\) = 0 时,我们得到先验分布;当 \(\beta\) = 1 时,我们得到后验分布。因此,用更一般的话来说,我们总是在计算一个可以写成如下形式的退火后验分布的样本:

\[p(\theta \mid y)_{\beta} = p(y \mid \theta)^{\beta} p(\theta)\]

算法的总结是:

  1. \(\beta\) 初始化为零,阶段初始化为零。

  2. 生成 N 个样本 \(S_{\beta}\) 从先验分布中(因为当 :math beta = 0 时,退火后验分布就是先验分布)。

  3. 增加 \(\beta\) 以使有效样本大小等于某个预定义值(我们使用 \(Nt\),其中 \(t\) 默认为 0.5)。

  4. 计算一组 N 个重要性权重 W。这些权重是根据样本在阶段 i+1 和阶段 i 的似然比计算的。

  5. 根据 W 重新采样获得 \(S_{w}\)

  6. 使用 W 来计算提议分布(一个 MvNormal)的均值和协方差。

  7. 运行 N 个独立的 MCMC 链,每个链从 \(S_{w}\) 中的不同样本开始。对于 IMH 核,提议分布的均值是前一个后验阶段的均值,而不是参数空间中的当前点。

  8. N 条链运行,直到与前一阶段的样本的自相关性在给定阈值下停止下降。

  9. 从步骤3重复,直到 \(\beta \ge 1\)

  10. 最终结果是从后验分布中抽取的N个样本的集合。

参考文献

[Minson2013]

Minson, S. E., Simons, M., 和 Beck, J. L. (2013). “贝叶斯反演用于有限断层地震源模型 I- 理论与算法.” 《国际地球物理杂志》, 2013, 194(3), 第1701-1726页. 链接

[Ching2007]

Ching, J., 和 Chen, Y. (2007). “基于贝叶斯模型更新、模型类别选择和模型平均的过渡马尔可夫链蒙特卡罗方法。” J. Eng. Mech., 2007, 133(7), pp. 816-832. doi:10.1061/(ASCE)0733-9399(2007)133:7(816). 链接