gpt4 book ai didi

MATLAB:协方差矩阵的行列式是 0 或 inf

转载 作者:行者123 更新时间:2023-11-30 09:21:20 30 4
gpt4 key购买 nike

我有一个 1500x1500 协方差矩阵,我正在尝试计算 EM-ML 方法的行列式。协方差矩阵是通过找到SIGMA矩阵然后将其传递到最近的SPD库(Link) 来获得的使矩阵为正定。在这种情况下,矩阵始终是奇异的。我尝试的另一种方法是使用 A'*A 技术手动生成正定矩阵。 (A 取 1600x1500 矩阵)。这总是给我无限的行列式。关于如何获得具有有限行列式的正定矩阵有什么想法吗?

最佳答案

你真的需要行列式,还是行列式的对数?例如,如果您正在计算高斯的对数似然,那么进入对数似然的就是行列式的对数。在高维中,行列式可能不适合 double ,但它的对数很可能适合。

如果您使用(下三角)因子 L 执行协方差 C 的乔列斯基因式分解,那么

C = L*L'

然后

det C = det(L) * det( L') = det(L) * det(L)

但是下三角矩阵的行列式是其对角线元素的乘积,因此,取上面的对数,我们得到:

log det C = 2*Sum{ i | log( L[i,i])}

(回复评论)即使您需要计算高斯 pdf,最好计算其对数并仅在需要时才取幂。例如,具有协方差 C(具有胆汁因子 L)和均值 0(纯粹为了节省打字)的 d 维高斯为:

p(x) = exp( -0.5*x'*inv(C)*x) /( sqrt( pow(2pi,d) * det(C)) 

所以

log p(x) = -0.5*x'*inv(C)*x - 0.5*d*log(2pi) - 0.5*log(det(C))

也可以写

log p(x) = -0.5*y'*y - 0.5*d*log(2pi) - log(det(L))

哪里

y = inv(L)*x

关于MATLAB:协方差矩阵的行列式是 0 或 inf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36920840/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com