pymc.NUTS#

class pymc.NUTS(*args, **kwargs)[源代码]#

基于哈密顿力学的连续变量采样器。

NUTS 自动调整每个样本的步长和步数。详细描述可以在 [1] 中找到,即“算法 6:带有双重平均的高效无 U 形转弯采样器”。

NUTS 提供了许多可以通过 trace.get_sampler_stats 访问的统计数据:

  • mean_tree_accept: 生成此样本的树的平均接受概率。所有样本(不包括预热阶段)的这些值的平均值应大约为 `target_accept`(此默认值为 0.8)。

  • diverging:此样本的轨迹是否发散。如果在燃烧期后有任何发散,这表明结果可能不可靠。重新参数化通常有帮助,但你也可以尝试将 target_accept 增加到 0.9 或 0.95。

  • energy: 样本被接受时的相空间点的能量。这可以用来识别具有问题性长尾的后验分布。参见下文示例。

  • energy_change: 轨迹开始和结束之间的能量差异。对于一个完美的积分器,这总是为零。

  • max_energy_change: 整个轨迹中能量的最大差异。

  • depth: 用于生成此示例的树的深度

  • tree_size: 采样树的叶子数量,当样本被接受时。这通常略小于 2 ** 深度。如果树的大小很大,采样器正在使用大量的蛙跳步骤来找到下一个样本。例如,如果后验分布中存在强相关性,如果后验分布有长尾,如果存在高曲率区域(“漏斗”),或者如果质量矩阵中的方差估计不准确,这种情况可能会发生。重新参数化模型或根据过去的样本估计后验方差可能会有所帮助。

  • tune: 如果生成此样本时启用了步长自适应,则为 True

  • step_size: 用于此样本的步长。

  • step_size_bar: 当前已知的最优步长。在调整样本之后,步长被设置为这个值。这个值应在调整过程中收敛。

  • model_logp: 该样本的模型对数似然。

  • process_time_diff: 绘制样本所花费的时间,由Python标准库 time.process_time 定义。这包括所有CPU时间,包括BLAS和OpenMP中的工作进程。

  • perf_counter_diff: 绘制样本所花费的时间,由 Python 标准库 time.perf_counter 定义(挂钟时间)。

  • perf_counter_start: 在绘制计算开始时 time.perf_counter 的值。

  • index_in_trajectory: 这通常仅在调试时有意义。它指示后验抽样在轨迹中的位置。例如,-4 表示该抽样是负方向上第四次蛙跳步骤的结果。

  • largest_eigvalsmallest_eigval:一些质量矩阵自适应算法的实验统计数据。如果未使用,则为 nan。

参考文献

[1]

Hoffman, Matthew D., & Gelman, Andrew. (2011). The No-U-Turn Sampler: 在Hamiltonian Monte Carlo中自适应设置路径长度。

方法

NUTS.__init__([vars, max_treedepth, ...])

设置 No-U-Turn 采样器。

NUTS.astep(q0)

执行一次HMC迭代。

NUTS.competence(var, has_grad)

检查这个类对于采样随机变量的适用性。

NUTS.reset([start])

NUTS.reset_tuning([start])

NUTS.step(point)

执行采样器的一个步骤。

NUTS.stop_tuning()

属性

default_blocked

name

stats_dtypes

包含 <=1 个字典的列表,该字典将统计名称映射到数据类型。

stats_dtypes_shapes

将统计名称映射到数据类型和形状。

vars

分配给步骤方法的变量。

integrator