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)[源代码]#
使用给定的步骤方法从后验中抽取样本。
通过复合步骤方法支持多步骤方法。
- 参数:
- draws
int
要抽取的样本数量。默认为 1000。默认情况下会丢弃调优的样本。参见
discard_tuned_samples
。- tune
int
调整的迭代次数,默认为 1000。采样器在调整过程中会调整步长、缩放比例或类似参数。调整样本将在
draws
参数指定的数量之外抽取,除非discard_tuned_samples
设置为 False,否则这些样本将被丢弃。- 链 :
int
int
要采样的链的数量。运行独立的链对于某些收敛统计很重要,并且还可以揭示后验中的多个模式。如果
None
,则设置为cores
或 2 中的较大者。- 核心 :
int
int
要并行运行的链的数量。如果为
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_sampler
str
要运行的 NUTS 实现。可以是以下之一:[“pymc”, “nutpie”, “blackjax”, “numpyro”]。这需要安装所选的采样器。除了 “pymc” 之外,所有采样器都需要完整的模型是连续的。
- initvals可选的,
包含初始值策略的字典或字典列表,用于替代 Model.initial_values 中的默认值。键应为变换随机变量的名称。NUTS 的初始化方法(参见
init
关键字)可以覆盖默认值。- init
str
用于自动分配的 NUTS 采样器的初始化方法。查看 pm.init_nuts 以获取所有选项的列表。当手动传递 NUTS 步骤方法时,此参数将被忽略。仅适用于 pymc nuts 采样器。
- jitter_max_retries
int
创建初始矩阵时(每个链)的最大重复尝试次数,该矩阵具有均匀抖动并产生有限概率。这适用于
jitter+adapt_diag
和jitter+adapt_full
初始化方法。- n_init
int
初始化器的迭代次数。仅适用于 ‘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_ctx
multiprocessing.context.BaseContent
用于并行采样的多进程上下文。详情请参阅多进程文档。
- model模型(如果已在上下文中,则为可选)
要从中采样的模型。该模型需要有自由随机变量。
- draws
- 返回:
- tracepymc.backends.base.MultiTrace 或 arviz.InferenceData
一个包含样本的
MultiTrace
或 ArviZInferenceData
对象。
注释
可选的关键字参数可以传递给
sample
,以便在采样期间传递给所使用的step_method
。例如:
target_accept
到 NUTS: nuts={‘target_accept’:0.9}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_method
s,在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