【问题标题】:MATLAB: The determinant of a covariance matrix is either 0 or infMATLAB:协方差矩阵的行列式是 0 或 inf
【发布时间】:2016-08-23 13:58:12
【问题描述】:

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

【问题讨论】:

  • 最简单的方法是统一矩阵eye(N)。声称矩阵M的任意主子矩阵(M可以理解为M的最大子矩阵)的行列式是非零且正的。M是正定的是等价的。因此我想你有溢出realmax 值的问题。例如,您是否尝试过计算det(A*10^-6)
  • 您也可以尝试通过循环ii命令DetMinorA(ii)=det(A(1:ii,1:ii));来找到可以评估的最大sumbatrix
  • 所以我尝试了det(A*10e-6),现在这给了我行列式为零。此外,DetMinorA(ii)=det(A(1:ii,1:ii)); 给了我有限的值,直到第 145 个索引。这个怎么办?
  • 那么你肯定会溢出realmax 的值。也许你可以尝试循环DetMinor(ii,jj)=det(A(1:ii,1:ii)*10^-jj);。也许jj=0:0.5:6 会带来好的结果,但解释起来会很困难。或者您可以尝试寻找具有智能零分布的矩阵。
  • 行列式很可能是有限的,但不是 64 位精度算术。由于行列式是特征值的乘积,无限结果仅意味着该集合中不存在真零(至少对于 Matlab 使用的 LU 分解的工作精度)并且没有真正的零特征值,行列式可能会溢出或下溢,除非选择特征值的大小使得乘积保持在realminrealmax 之间。也就是说,为什么无限的决定因素会影响你的工作?

标签: matlab matrix machine-learning statistics linear-algebra


【解决方案1】:

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

如果你对协方差 C 进行胆尔斯基因式分解,用(下三角)因子 L 表示,

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

【讨论】:

  • 是的,我需要行列式,因为我需要生成分母中包含 |SIGMA| 的高斯概率分布函数。
猜你喜欢
  • 1970-01-01
  • 2014-02-07
  • 2022-01-04
  • 2012-11-22
  • 2019-04-10
  • 2014-03-12
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
相关资源
最近更新 更多