首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyMC3大MvNormal优先

PyMC3大MvNormal优先
EN

Stack Overflow用户
提问于 2017-07-25 08:35:43
回答 1查看 182关注 0票数 1

我希望将大型多元正态分布指定为PyMC3中的优先项。这种分布的精度矩阵具有数值等于零的行列式。这似乎是PyMC3的一个问题。有什么建议吗?我只需要最大化后验,这是可以做的,无论行列式的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 21:12:02

pymc3通过计算cholesky分解得到行列式。它也是这样做的,在一个原木规模,所以这真的不应该低于流量。然而,矩阵可能是病态的,cholesky分解失败了。在这种情况下,您可以在矩阵中添加一个小对角线。

如果您确定要使用病态矩阵,则可以编写自己版本的pm.MvNormal,这不包括det。与此类似的东西:

代码语言:javascript
复制
class MvNormalNoDet(pm.Continuous):
    def __init__(self, mu, tau, *args, **kwargs):
        self._mu = tt.as_tensor_variable(mu)
        self._tau = tt.as_tensor_variable(tau)
        self.mean = self.median = self.mode = self._mu
        super().__init__(*args, **kwargs)

    def logp(self, value):
        diff = value - self._mu
        return -0.5 * (diff * tt.dot(self._tau, diff)).sum(axis=-1)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45298007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档