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)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 标量,不带雅可比行列式项。