pymc.ZeroSumNormal#
- class pymc.ZeroSumNormal(*args, zerosum_axes=None, n_zerosum_axes=None, support_shape=None, dims=None, **kwargs)[源代码]#
ZeroSumNormal 分布,即正态分布,其中一个或多个轴被约束为总和为零。默认情况下,最后一个轴被约束为总和为零。更多详情请参见 n_zerosum_axes 关键字参数。
\[\begin{split}\begin{align*} ZSN(\sigma) = N \Big( 0, \sigma^2 (I - \tfrac{1}{n}J) \Big) \\ \text{其中} \ ~ J_{ij} = 1 \ ~ \text{且} \\ n = \text{零和轴的数量} \end{align*}\end{split}\]- 参数:
- sigma : 类似张量 的
float
tensor_like offloat
尺度参数(sigma > 0)。它实际上是底层无约束正态分布的标准差。如果未指定,默认为1。目前,
sigma
必须是一个标量,以确保零和约束。- n_zerosum_axes: int, 默认为 1
从最右边的位置开始,强制执行零和约束的轴的数量。默认为1,即最右边的轴。
- zerosum_axes: int, 已弃用,请使用其继任者 n_zerosum_axes
- dims: 字符串序列, 可选
分布的维度名称。与其他 PyMC 分布的工作方式相同。如果未传递
shape
,则这是必要的。- shape: 整数的元组, 可选
分布的形状。与其他 PyMC 分布的工作方式相同。如果未传递
dims
或observed
,则这是必要的。
- sigma : 类似张量 的
警告
sigma
必须是一个标量,以确保零和约束。未来版本可能会增加指定sigma
向量的功能。n_zerosum_axes
必须大于 0。如果你想使用n_zerosum_axes = 0
的行为,只需使用pm.Normal
。示例
定义一个 ZeroSumNormal 变量,默认情况下 sigma=1 和 n_zerosum_axes=1:
COORDS = { "regions": ["a", "b", "c"], "answers": ["yes", "no", "whatever", "don't understand question"], } with pm.Model(coords=COORDS) as m: # the zero sum axis will be 'answers' v = pm.ZeroSumNormal("v", dims=("regions", "answers")) with pm.Model(coords=COORDS) as m: # the zero sum axes will be 'answers' and 'regions' v = pm.ZeroSumNormal("v", dims=("regions", "answers"), n_zerosum_axes=2) with pm.Model(coords=COORDS) as m: # the zero sum axes will be the last two v = pm.ZeroSumNormal("v", shape=(3, 4, 5), n_zerosum_axes=2)
方法
ZeroSumNormal.dist
([sigma, n_zerosum_axes, ...])创建一个与 cls 分布相对应的张量变量。