批量矩阵 RV 的维度规范(例如 Wishart dist)

问题描述 投票:0回答:0

我目前正在构建具有多元正态似然和截断基于定义的狄利克雷过程混合模型。具体来说,这是 $K$ 个分量的混合,每个分量都与平均参数 mu 和逆协方差矩阵 tau 以及正态分布 $N(mu, tau^{-1})$ 相关。数据包括 $N$ 个观测值,具有 $d$ 个特征。

在我构建模型时,我希望每个混合成分都有自己独特的 mu 和 tau。因此,我必须在变量的定义中指定 explicity 批量大小,即组件的数量,如下所示:

    mus = pm.MvNormal("mu", tbar, cov=np.eye(d)/0.1, shape=(K,d))

但是,当涉及到协方差/精度矩阵的定义时,这会变得有点混乱。我尝试了几种指定形状参数的方法,但它们都会导致我出错。 (我试过

shape=(K,)
,我认为它会被程序简单地忽略;还有
shape=(K,d)
shape=(K,d,d)
,它们都引发了一些错误。)我还尝试更改参数
nu
的形状隐含地包含批次信息,这也引发了错误。我应该如何用这样的矩阵值随机变量指定这个批量?

当我尝试可视化由下面的块定义的模型时,我发现它具有维度 $N imes N$ 的观察值,这不是预期的。 (我期待 $N imes d$)。这是我的代码:

with pm.Model(coords={"component": np.arange(K), "obs_id": np.arange(N), "feature": np.arange(d)}) as model:
    alpha = pm.Gamma("alpha", 1.0, 1.0)
    w = pm.StickBreakingWeights("w", alpha, K-1)
    
    mus = pm.MvNormal("mu", tbar, cov=np.eye(d)/0.1, shape=(K,d))
    taus = pm.Wishart("taus", nu=d*np.ones(K), V=S_inv, shape=(K,))
    category = pm.Categorical("category", p=w, shape=N)

    obs = pm.MvNormal("obs", mu=mus[category], tau=taus[category], observed=df.values)

此外,我一直在想是否可以对category变量进行

collapse
,它是离散的,使得程序很难进行变分推理。在模型中使用
Mixture
会有帮助吗? (然而,这不是我现在主要关心的问题,哈哈,我真的在与维度作斗争!)

感谢任何提示或建议!

pymc3 pymc
© www.soinside.com 2019 - 2024. All rights reserved.