pymc.model.core.Model#
- class pymc.model.core.Model(*args, **kwargs)[源代码]#
封装模型的变量和似然因子。
模型类可用于创建基于类的模型。要创建基于类的模型,您应该继承自
Model
并在 __init__ 方法中覆盖任意定义(不要忘记首先调用基类pymc.Model.__init__()
)。- 参数:
- 名称: str
将用作模型内定义的所有随机变量名称前缀的名称
- check_bounds: bool
确保分布的输入参数在有效范围内。如果你的模型是以一种你知道参数只能取有效值的方式构建的,你可以将此设置为 False 以提高速度。如果你的模型包含离散变量,则不应使用此设置。
示例
如何定义一个自定义模型
class CustomModel(Model): # 1) override init def __init__(self, mean=0, sigma=1, name=''): # 2) call super's init first, passing model and name # to it name will be prefix for all variables here if # no name specified for model there will be no prefix super().__init__(name, model) # now you are in the context of instance, # `modelcontext` will return self you can define # variables in several ways note, that all variables # will get model's name prefix # 3) you can create variables with the register_rv method self.register_rv(Normal.dist(mu=mean, sigma=sigma), 'v1', initval=1) # this will create variable named like '{name::}v1' # and assign attribute 'v1' to instance created # variable can be accessed with self.v1 or self['v1'] # 4) this syntax will also work as we are in the # context of instance itself, names are given as usual Normal('v2', mu=mean, sigma=sigma) # something more complex is allowed, too half_cauchy = HalfCauchy('sigma', beta=10, initval=1.) Normal('v3', mu=mean, sigma=half_cauchy) # Deterministic variables can be used in usual way Deterministic('v3_sq', self.v3 ** 2) # Potentials too Potential('p1', pt.constant(1)) # After defining a class CustomModel you can use it in several # ways # I: # state the model within a context with Model() as model: CustomModel() # arbitrary actions # II: # use new class as entering point in context with CustomModel() as model: Normal('new_normal_var', mu=1, sigma=0) # III: # just get model instance with all that was defined in it model = CustomModel() # IV: # use many custom models within one context with Model() as model: CustomModel(mean=1, name='first') CustomModel(mean=2, name='second') # variables inside both scopes will be named like `first::*`, `second::*`
方法
Model.__init__
([name, coords, check_bounds, ...])Model.add_coord
(name[, values, mutable, length])在模型中注册一个维度坐标。
Model.add_coords
(coords, *[, lengths])向量化版本的
Model.add_coord
。Model.add_named_variable
(var[, dims])将一个随机图变量添加到模型的命名变量中。
Model.check_start_vals
(start)检查MCMC的起始值不会导致相关的对数概率评估为无效值(例如,
Model.compile_d2logp
([vars, jacobian])编译后的对数概率密度海森函数。
Model.compile_dlogp
([vars, jacobian])编译后的对数概率密度梯度函数。
Model.compile_fn
(outs, *[, inputs, mode, ...])编译一个 PyTensor 函数
Model.compile_logp
([vars, jacobian, sum])编译后的对数概率密度函数。
Model.create_value_var
(rv_var, transform[, ...])创建一个
TensorVariable
,它将作为对数似然图中随机变量的“值”使用。Model.d2logp
([vars, jacobian])模型对数概率的Hessian w.r.t.
Model.debug
([point, fn, verbose])在指定位置调试模型函数。
Model.dlogp
([vars, jacobian])模型对数概率的梯度 w.r.t.
评估未转换和已转换的自由变量的形状。
Model.initial_point
([random_seed])计算模型的初始点。
Model.logp
([vars, jacobian, sum])模型的逐元素对数概率。
Model.logp_dlogp_function
([grad_vars, tempered])编译一个计算 logp 和梯度的 PyTensor 函数。
Model.make_obs_var
(rv_var, data, dims, ...)为观察到的随机变量创建一个 TensorVariable。
Model.name_for
(name)检查名称是否有前缀,并在需要时添加
Model.name_of
(name)检查名称是否具有前缀并在需要时删除
Model.point_logps
([point, round_vals])计算模型中所有随机变量对 point 的对数概率。
Model.profile
(outs, *[, n, point, profile])编译并分析一个返回
outs
的 PyTensor 函数,该函数以模型变量的值作为字典参数。Model.register_rv
(rv_var, name[, observed, ...])在模型中注册一个(未)观察到的随机变量。
Model.replace_rvs_by_values
(graphs, **kwargs)在图中克隆并替换随机变量为它们的值变量。
Model.set_data
(name, values[, coords])更改模型中数据变量的值。
Model.set_dim
(name, new_length[, coord_values])更新一个可变维度。
Model.set_initval
(rv_var, initval)为随机变量设置一个初始值(策略)。
Model.shape_from_dims
(dims)Model.to_graphviz
(*[, var_names, formatting])从 PyMC 模型生成一个 graphviz 有向图。
Model.update_start_vals
(a, b)使用 b 更新点 a,而不覆盖现有键。
属性
RV_dims
特定模型变量的维度名称元组。
basic_RVs
模型所依据的随机变量列表(不包括确定性变量)。
cont_vars
continuous_value_vars
模型中的所有连续值变量
coords
模型维度的坐标值。
datalogp
PyTensor 观测变量和潜在项的对数概率标量
dim_lengths
模型中尺寸的符号长度。
disc_vars
discrete_value_vars
模型中的所有离散值变量
initial_values
将变换后的变量映射到初始值占位符。
isroot
model
observedlogp
观察变量的对数概率的 PyTensor 标量
parent
potentiallogp
PyTensor 标量,表示潜在项的对数概率
prefix
root
unobserved_RVs
所有随机变量的列表,包括确定性的变量。
unobserved_value_vars
所有随机变量(包括未转换的投影)的列表,以及作为模型对数似然图输入和输出的确定性变量
value_vars
用作模型对数似然输入的未观测随机变量列表(不包括确定性变量)。
varlogp
PyTensor 未观测随机变量(不包括确定性变量)的对数概率标量。
varlogp_nojac
PyTensor 标量,表示未观察到的随机变量(不包括确定性变量)的对数概率,不包括雅可比项。