1
我想在PyMC3中指定較大的多元正態分佈。這種分佈的精度矩陣的行列式在數值上等於零。這似乎是PyMC3的一個問題。有什麼建議麼?我只需要最大化後驗,不管行列式的值如何,都可以完成。PyMC3 large MvNormal before
我想在PyMC3中指定較大的多元正態分佈。這種分佈的精度矩陣的行列式在數值上等於零。這似乎是PyMC3的一個問題。有什麼建議麼?我只需要最大化後驗,不管行列式的值如何,都可以完成。PyMC3 large MvNormal before
pymc3通過計算cholesky分解得到行列式。它也是以對數形式進行的,所以這真的不應該下溢。然而,矩陣可能會受到病態和膽固醇分解失敗。在這種情況下,您可以在矩陣中添加一個小對角線。
如果您確定要使用惡劣的條件矩陣,可以編寫自己的pm.MvNormal
版本,但不包括該det。沿線的東西:
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)