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_funcself.likelihood_logp_func 在此步骤中创建。这些函数期望一个包含每个展开模型变量(按照 pymc.Model.initial_point() 中指定的顺序)总大小的 1D numpy 数组。

最后,此方法计算初始粒子的对数先验和对数似然,并将它们保存在 self.prior_logpself.likelihood_logp 中。

此方法不应被修改。

setup_kernel可选的

可能包含在采样开始前应执行的任何逻辑。

在每个采样阶段,以下方法按顺序被调用:

更新_beta_和_权重默认

逆温度 self.beta 根据 self.likelihood_logpthreshold 参数进行更新。

每个粒子的重要性 self.weights 是从旧的和新的选择的逆温度计算出来的。

存储在 self.iteration 中的迭代次数由该方法更新。

最后,从这些权重更新了tempered后验的模型 log_marginal_likelihood

重采样默认

self.posterior 中的粒子根据 self.weights 进行有放回采样,并将在 self.resampling_indexes 中保存使用的重采样索引。

数组 self.prior_logpself.likelihood_logp 根据重采样粒子的顺序重新排列。self.tempered_posterior_logp 从这些和当前的 self.beta 计算得出。

调谐可选的

可能包含应在每次突变步骤之前执行的逻辑。

突变必需的

self.tempered_posterior 中变异粒子。

此方法还负责更新 self.prior_logpself.likelihod_logpself.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.initialize_population()

从先验分布中创建初始种群

SMC_KERNEL.mutate()

在每个阶段对粒子应用特定于内核的扰动

SMC_KERNEL.resample()

基于重要性权重重新采样粒子

SMC_KERNEL.sample_settings()

SMC_kernel 设置将在采样结束时保存一次。

SMC_KERNEL.sample_stats()

在每个阶段的末尾保存的统计数据

SMC_KERNEL.setup_kernel()

在采样开始前执行一次的设置逻辑

SMC_KERNEL.tune()

在每次变异步骤之前执行的调优逻辑

SMC_KERNEL.update_beta_and_weights()

计算下一个逆温度 (beta)