pymc.NormalMixture#

class pymc.NormalMixture(name, w, mu, sigma=None, tau=None, comp_shape=(), **kwargs)[源代码]#

普通混合对数似然

\[f(x \mid w, \mu, \sigma^2) = \sum_{i = 1}^n w_i N(x \mid \mu_i, \sigma^2_i)\]

支持

\(x \in \mathbb{R}\)

均值

\(\sum_{i = 1}^n w_i \mu_i\)

方差

\(\sum_{i = 1}^n w_i (\sigma^2_i + \mu_i^2) - \left(\sum_{i = 1}^n w_i \mu_i\right)^2\)

参数:
w : 类似张量floattensor_like of float

w >= 0 且 w <= 1 混合权重

mu : 类似张量floattensor_like of float

组件意味着

sigma : 类似张量floattensor_like of float

组件标准差

tau : 类似张量floattensor_like of float

组件精度

comp_shape正态分量的形状

注意,它应该与混合分布的形状不同,最后一个轴表示组件的数量。

注释

你只需要传入 sigma 或 tau,但不能同时传入两者。

示例

n_components = 3

with pm.Model() as gauss_mix:
    μ = pm.Normal(
        "μ",
        mu=data.mean(),
        sigma=10,
        shape=n_components,
        transform=pm.distributions.transforms.ordered,
        initval=[1, 2, 3],
    )
    σ = pm.HalfNormal("σ", sigma=10, shape=n_components)
    weights = pm.Dirichlet("w", np.ones(n_components))

    y = pm.NormalMixture("y", w=weights, mu=μ, sigma=σ, observed=data)

方法

NormalMixture.dist(w, mu[, sigma, tau, ...])