pymc.smc.kernels.SMC_KERNEL#
- class pymc.smc.kernels.SMC_KERNEL(draws=2000, start=None, model=None, random_seed=None, threshold=0.5)[源代码]#
用于顺序蒙特卡罗核的基类。
要创建一个新的 SMC 内核,你应该从此类派生。
在采样之前,以下方法按顺序调用一次:
- 初始化种群
选择SMC粒子的初始种群。应返回一个字典,其中包含 {var.name : 大小为 (draws, var.size) 的 numpy 数组}。默认从先验分布中采样。仅当未指定 start 时,才会调用此方法。
- _initialize_kernel默认
在变量 self.tempered_posterior 中创建初始粒子种群,并将模型变量的形状和大小的信息填充到 self.var_info 字典中,格式为 {var.name : (var.shape, var.size)}。
函数 self.prior_logp_func 和 self.likelihood_logp_func 在此步骤中创建。这些函数期望一个包含每个展开模型变量(按照
pymc.Model.initial_point()
中指定的顺序)总大小的 1D numpy 数组。最后,此方法计算初始粒子的对数先验和对数似然,并将它们保存在 self.prior_logp 和 self.likelihood_logp 中。
此方法不应被修改。
- setup_kernel可选的
可能包含在采样开始前应执行的任何逻辑。
在每个采样阶段,以下方法按顺序被调用:
- 更新_beta_和_权重默认
逆温度 self.beta 根据 self.likelihood_logp 和 threshold 参数进行更新。
每个粒子的重要性 self.weights 是从旧的和新的选择的逆温度计算出来的。
存储在 self.iteration 中的迭代次数由该方法更新。
最后,从这些权重更新了tempered后验的模型 log_marginal_likelihood。
- 重采样默认
self.posterior 中的粒子根据 self.weights 进行有放回采样,并将在 self.resampling_indexes 中保存使用的重采样索引。
数组 self.prior_logp 和 self.likelihood_logp 根据重采样粒子的顺序重新排列。self.tempered_posterior_logp 从这些和当前的 self.beta 计算得出。
- 调谐可选的
可能包含应在每次突变步骤之前执行的逻辑。
- 突变必需的
在 self.tempered_posterior 中变异粒子。
此方法还负责更新 self.prior_logp、self.likelihod_logp 和 self.tempered_posterior_logp,对应于每个变异的粒子。
- 样本统计默认
在每个阶段的末尾以字典格式返回重要的采样统计信息。这些信息将保存在最终的 InferenceData 对象的 sample_stats 下。
最后,在采样结束时调用以下方法:
- _posterior_to_trace默认
将粒子的最终种群转换为后验迹对象。此方法不应被修改。
- sample_settings默认
以字典格式返回采样结束时的重要 sample_settings。这些将被保存在最终的 InferenceData 对象的 sample_stats 下。
方法
SMC_KERNEL.__init__
([draws, start, model, ...])初始化 SMC_kernel 类。
从先验分布中创建初始种群
在每个阶段对粒子应用特定于内核的扰动
基于重要性权重重新采样粒子
SMC_kernel 设置将在采样结束时保存一次。
在每个阶段的末尾保存的统计数据
在采样开始前执行一次的设置逻辑
在每次变异步骤之前执行的调优逻辑
计算下一个逆温度 (beta)