pymc.sample#

pymc.sample(draws=1000, *, tune=1000, chains=None, cores=None, random_seed=None, progressbar=True, step=None, nuts_sampler='pymc', initvals=None, init='auto', jitter_max_retries=10, n_init=200000, trace=None, discard_tuned_samples=True, compute_convergence_checks=True, keep_warning_stat=False, return_inferencedata=True, idata_kwargs=None, nuts_sampler_kwargs=None, callback=None, mp_ctx=None, model=None, **kwargs)[源代码]#

使用给定的步骤方法从后验中抽取样本。

通过复合步骤方法支持多步骤方法。

参数:
drawsint

要抽取的样本数量。默认为 1000。默认情况下会丢弃调优的样本。参见 discard_tuned_samples

tuneint

调整的迭代次数,默认为 1000。采样器在调整过程中会调整步长、缩放比例或类似参数。调整样本将在 draws 参数指定的数量之外抽取,除非 discard_tuned_samples 设置为 False,否则这些样本将被丢弃。

: intint

要采样的链的数量。运行独立的链对于某些收敛统计很重要,并且还可以揭示后验中的多个模式。如果 None,则设置为 cores 或 2 中的较大者。

核心 : intint

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

random_seedpython:int, numpy:array_like of python:int, RandomState 或 Generator, 可选

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

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

是否在命令行中显示进度条。进度条显示完成百分比、每秒采样速度(SPS)以及预计的剩余时间直到完成(“预计到达时间”;ETA)。仅适用于 pymc nuts 采样器。

step函数或python:iterable的函数

一个步骤函数或函数集合。如果没有为某些变量定义步骤方法,这些变量的步骤方法将会自动分配。默认情况下,如果适合模型,将使用NUTS步骤方法。

nuts_samplerstr

要运行的 NUTS 实现。可以是以下之一:[“pymc”, “nutpie”, “blackjax”, “numpyro”]。这需要安装所选的采样器。除了 “pymc” 之外,所有采样器都需要完整的模型是连续的。

initvals可选的,

包含初始值策略的字典或字典列表,用于替代 Model.initial_values 中的默认值。键应为变换随机变量的名称。NUTS 的初始化方法(参见 init 关键字)可以覆盖默认值。

initstr

用于自动分配的 NUTS 采样器的初始化方法。查看 pm.init_nuts 以获取所有选项的列表。当手动传递 NUTS 步骤方法时,此参数将被忽略。仅适用于 pymc nuts 采样器。

jitter_max_retriesint

创建初始矩阵时(每个链)的最大重复尝试次数,该矩阵具有均匀抖动并产生有限概率。这适用于 jitter+adapt_diagjitter+adapt_full 初始化方法。

n_initint

初始化器的迭代次数。仅适用于 ‘ADVI’ 初始化方法。

trace后端, 可选

一个后端实例或 None。如果为 None,则使用 NDArray 后端。

discard_tuned_samples : 布尔值布尔

是否丢弃调谐间隔的后验样本。

compute_convergence_checks : bool, 默认=Truebool, 默认=True

是否计算采样器统计数据,如 Gelman-Rubin 和 effective_n

keep_warning_stat : 布尔值布尔

如果 True ,例如 HMC 采样器发出的“警告”状态将被保留在返回的 idata.sample_stat 组中。这会导致 idata 不支持 .to_netcdf().to_zarr() ,并且只有在您打算立即使用“警告”对象时才应设置为 True 。默认值为 False ,以便自动应用 pm.drop_warning_stat ,使 InferenceData 兼容保存。

return_inferencedata : 布尔值布尔

是否将跟踪结果作为 arviz.InferenceData (True) 对象返回,还是作为 MultiTrace (False) 返回。默认为 True

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

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

nuts_sampler_kwargs : dict, 可选python:dict, 可选

用于实现nuts的采样库的关键字参数。仅在通过 nuts_sampler 关键字参数指定外部采样器时使用。

callback函数, 默认=None

一个函数,它会在链的轨迹中为每个样本调用。该函数以轨迹和当前绘制为参数调用,并将包含单个轨迹的所有样本。draw.chain 参数可用于确定样本来自哪个活动链。通过在回调中抛出 KeyboardInterrupt 可以中断采样。

mp_ctxmultiprocessing.context.BaseContent

用于并行采样的多进程上下文。详情请参阅多进程文档。

model模型(如果已在上下文中,则为可选)

要从中采样的模型。该模型需要有自由随机变量。

返回:
tracepymc.backends.base.MultiTrace 或 arviz.InferenceData

一个包含样本的 MultiTrace 或 ArviZ InferenceData 对象。

注释

可选的关键字参数可以传递给 sample,以便在采样期间传递给所使用的 step_method

例如:

  1. target_accept 到 NUTS: nuts={‘target_accept’:0.9}

  2. transit_p 到 BinaryGibbsMetropolis: binary_gibbs_metropolis={‘transit_p’:.7}

请注意,可用的步骤名称有:

nuts, hmc, metropolis, binary_metropolis, binary_gibbs_metropolis, categorical_gibbs_metropolis, DEMetropolis, DEMetropolisZ, slice

NUTS 步骤方法有多个选项,包括:

  • target_accept : 取值范围为 [0, 1] 的浮点数。步长会调整以近似达到这个接受率。较高的值如 0.9 或 0.95 通常对有问题的后验分布效果更好。这个参数可以直接传递给 sample。

  • max_treedepth : 轨迹树的最大深度

  • step_scale : float, 默认值为 0.25 初始步长猜测值按 \(1/n**(1/4)\) 缩小,其中 n 是参数空间的维度

或者,如果你手动声明了 step_methods,在 step

然后,您可以直接处理 step_method 关键字参数。例如,对于包含 NUTS 和 BinaryGibbsMetropolis 的 CompoundStep,您可以发送

step=[pm.NUTS([freeRV1, freeRV2], target_accept=0.9),
      pm.BinaryGibbsMetropolis([freeRV3], transit_p=.7)]

你可以在步骤方法的文档字符串中找到参数的完整列表。

示例

In [1]: import pymc as pm
   ...: n = 100
   ...: h = 61
   ...: alpha = 2
   ...: beta = 2

In [2]: with pm.Model() as model: # context management
   ...:     p = pm.Beta("p", alpha=alpha, beta=beta)
   ...:     y = pm.Binomial("y", n=n, p=p, observed=h)
   ...:     idata = pm.sample()

In [3]: az.summary(idata, kind="stats")

Out[3]:
    mean     sd  hdi_3%  hdi_97%
p  0.609  0.047   0.528    0.699