我有一个1500x1500的协方差矩阵,我试图计算EM-ML方法的决定因素。协方差矩阵是通过找到SIGMA矩阵然后将其传递到nearestSPD库(Link) 以使矩阵为正定而获得的。在这种情况下,矩阵总是单数的。我尝试的另一种方法是使用A' * A技术手动生成正定矩阵。 (A被视为1600x1500矩阵)。这总是让我的决定因素是无限的。关于如何用有限行列式得到正定矩阵的任何想法?
答案 0 :(得分:0)
您是否确实需要决定因素或行列式的日志? 例如,如果您正在计算高斯的对数似然,则输入对数似然的是行列式的对数。在高维度中,决定因素不适合双重,但其日志最有可能。
如果你执行协方差C的胆怯分解,用(下三角)因子L说明
for r in range(how_many):
for c in range (how_many):
print list [r][c]
然后
C = L*L'
但是下三角矩阵的行列式是其对角元素的乘积,因此,我们得到上面的日志:
det C = det(L) * det( L') = det(L) * det(L)
(回应评论) 即使您需要计算高斯pdf,最好只计算需要时计算的日志和指数。例如,具有协方差C(具有胆甾烷因子L)和平均值0(纯粹为了节省打字)的d维角高斯是:
log det C = 2*Sum{ i | log( L[i,i])}
所以
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))