pymc.model.core.Deterministic#
- pymc.model.core.Deterministic(name, var, model=None, dims=None)[源代码]#
创建一个命名的确定性变量。
确定性节点只有在给定所有输入的情况下才是确定性的,即它们不会向模型中添加随机性。它们通常用于记录中间结果。
- 参数:
- 返回:
- var : 类似张量tensor_like
包装在 Deterministic 中的已注册命名变量。
注释
尽管添加一个 Deterministic 节点会迫使 PyMC 计算这个表达式,否则这个表达式可能会被优化掉,但这并不会带来性能成本。实际上,Deterministic 节点是在主计算图之外计算的,可以像没有 Deterministic 节点一样进行优化。而在 NUTS 步骤中,优化后的图可以被评估数千次,Deterministic 量只在步骤结束时计算一次,使用其他随机变量的最终值。
示例
确实,PyMC 允许随机变量的任意组合,例如在逻辑回归的情况下
with pm.Model(): alpha = pm.Normal("alpha", 0, 1) intercept = pm.Normal("intercept", 0, 1) p = pm.math.invlogit(alpha * x + intercept) outcome = pm.Bernoulli("outcome", p, observed=outcomes)
但不会记住表达式
pm.math.invlogit(alpha * x + intercept)
已被赋值给变量p
的事实。如果量p
很重要,并且希望在采样轨迹中跟踪其值,那么可以使用一个确定性节点:with pm.Model(): alpha = pm.Normal("alpha", 0, 1) intercept = pm.Normal("intercept", 0, 1) p = pm.Deterministic("p", pm.math.invlogit(alpha * x + intercept)) outcome = pm.Bernoulli("outcome", p, observed=outcomes)
从数学角度来看,这两种模型是完全等价的。然而,在第一种情况下,推断数据将仅包含变量
alpha
、intercept
和outcome
的值。在第二种情况下,它还将包含每个观测点p
的采样值。