MarginalModel#

class pymc_extras.MarginalModel(*args, **kwargs)[source]#

PyMC 模型 的子类,实现了在 logp 转换中自动边缘化变量的功能

在定义完整的模型之后,可以使用 marginalize 方法来指示应该边缘化的变量子集

注释

边缘化功能仍然非常受限。只有有限的离散变量可以被边缘化。确定性和势不能条件性地依赖于被边缘化的变量。

此外,并非所有此类变量的实例都可以被边缘化。如果一个变量具有批处理维度,则要求任何条件相关的变量都使用来自单个批处理维度的信息。换句话说,连接边缘化变量与因变量的图必须完全由 Elemwise Operations 组成。这是确保可以生成高效 logprob 图所必需的。如果您想绕过此限制,您可以将边缘化变量的每个维度分成标量分量,然后将它们堆叠在一起。请注意,此类图的大小将随着边缘化变量的数量呈指数增长。

出于同样的原因,不可能边缘化具有多元因变量的 RV。

示例

边缘化单个变量

import pymc as pm
from pymc_extras import MarginalModel

with MarginalModel() as m:
    p = pm.Beta("p", 1, 1)
    x = pm.Bernoulli("x", p=p, shape=(3,))
    y = pm.Normal("y", pm.math.switch(x, -10, 10), observed=[10, 10, -10])

    m.marginalize([x])

    idata = pm.sample()
__init__(*args, **kwargs)[source]#

方法

__init__(*args, **kwargs)

add_coord(name[, values, mutable, length])

向模型注册维度坐标。

add_coords(coords, *[, lengths])

Model.add_coord 的向量化版本。

add_named_variable(var[, dims])

将随机图变量添加到模型的命名变量中。

check_start_vals(start, **kwargs)

检查 logp 在起始点是否已定义且有限。

clone()

compile_d2logp([vars, jacobian, negate_output])

已编译的对数概率密度 Hessian 函数。

compile_dlogp([vars, jacobian])

已编译的对数概率密度梯度函数。

compile_fn(outs, *[, inputs, mode, point_fn])

编译 PyTensor 函数。

compile_logp([vars, jacobian, sum])

已编译的对数概率密度函数。

copy()

克隆模型。

create_value_var(rv_var, *, ...[, value_var])

创建一个 TensorVariable,它将用作随机变量在对数似然图中的“值”。

d2logp([vars, jacobian, negate_output])

模型的对数概率的 Hessian,相对于。

debug([point, fn, verbose])

在点处调试模型函数。

dlogp([vars, jacobian])

模型的对数概率的梯度,相对于。

eval_rv_shapes()

评估未转换和已转换自由变量的形状。

from_model(model)

get_context([error_if_none, ...])

initial_point([random_seed])

计算模型的初始点。

logp([vars])

模型的基本对数概率。

logp_dlogp_function([grad_vars, tempered, ...])

编译一个计算 logp 和梯度的 PyTensor 函数。

make_obs_var(rv_var, data, dims, ...)

为观测到的随机变量创建一个 TensorVariable

marginalize(rvs_to_marginalize)

name_for(name)

检查名称是否具有前缀,并在需要时添加。

name_of(name)

检查名称是否具有前缀,并在需要时删除。

point_logps([point, round_vals])

计算模型中所有随机变量的 point 的对数概率。

profile(outs, *[, n, point, profile])

编译并分析一个 PyTensor 函数,该函数返回 outs 并将模型变量的值作为字典作为参数。

recover_marginals(idata[, var_names, ...])

根据具有后验组的 InferenceData 给出的模型参数,计算边缘化变量的后验对数概率和样本

register_data_var(data[, dims])

向模型注册数据变量。

register_rv(rv_var, name, *[, observed, ...])

向模型注册(未)观测到的随机变量。

replace_rvs_by_values(graphs, **kwargs)

克隆并将图中的随机变量替换为其值变量。

set_data(name, values[, coords])

更改模型中数据变量的值。

set_dim(name, new_length[, coord_values])

更新可变维度。

set_initval(rv_var, initval)

为随机变量设置初始值(策略)。

shape_from_dims(dims)

to_graphviz(*[, var_names, formatting, ...])

从 PyMC 模型生成 graphviz Digraph。

unmarginalize(rvs_to_unmarginalize)

update_start_vals(a, b)

使用 b 更新点 a,而不覆盖现有键。

属性

basic_RVs

模型根据其定义的随机变量列表。

continuous_value_vars

模型中所有连续值变量。

coords

模型维度的坐标值。

datalogp

观测变量和势项的对数概率的 PyTensor 标量。

dim_lengths

模型中维度的符号长度。

discrete_value_vars

模型中所有离散值变量。

isroot

observedlogp

观测变量的对数概率的 PyTensor 标量。

parent

potentiallogp

势项的对数概率的 PyTensor 标量。

prefix

root

unobserved_RVs

所有随机变量的列表,包括确定性变量。

unobserved_value_vars

所有随机变量(包括未转换的投影)的列表,以及用作模型对数似然图的输入和输出的确定性变量。

value_vars

用作模型对数似然输入的未观测随机变量列表(不包括确定性变量)。

varlogp

未观测随机变量(不包括确定性变量)的对数概率的 PyTensor 标量。

varlogp_nojac

未观测随机变量(不包括确定性变量)的对数概率的 PyTensor 标量,不带雅可比行列式项。