Python PyMC3大MvNormal优先级

Python PyMC3大MvNormal优先级,python,bayesian,pymc3,Python,Bayesian,Pymc3,我想在PyMC3中指定大的多元正态分布作为先验。此分布的精度矩阵的行列式在数值上等于零。这似乎是PyMC3的一个问题。有什么建议吗?我只需要最大化后验概率,不管行列式的值是多少都可以 pymc3通过计算cholesky分解得到行列式。它在对数尺度上也能做到这一点,所以这真的不应该下溢。矩阵可能是病态的,但是cholesky分解失败。在这种情况下,您可以在矩阵中添加一个小对角线 如果您确定要使用病态矩阵,您可以编写自己版本的pm.MvNormal,其中不包括详细信息。大致如下: class MvN

我想在PyMC3中指定大的多元正态分布作为先验。此分布的精度矩阵的行列式在数值上等于零。这似乎是PyMC3的一个问题。有什么建议吗?我只需要最大化后验概率,不管行列式的值是多少都可以

pymc3通过计算cholesky分解得到行列式。它在对数尺度上也能做到这一点,所以这真的不应该下溢。矩阵可能是病态的,但是cholesky分解失败。在这种情况下,您可以在矩阵中添加一个小对角线

如果您确定要使用病态矩阵,您可以编写自己版本的
pm.MvNormal
,其中不包括详细信息。大致如下:

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)