正半正定矩阵和数值稳定性?

Ale*_*oks 5 math matrix numerical-methods numerical-stability

我正在尝试对共生矩阵(C)进行因子分析,该矩阵是根据术语 - 文档矩阵(TD)计算的,如下所示:C = TD*TD'

理论上C应该是正半正定的,但事实并非如此,并且因子分析算法因此无法使用它.由于速度原因,我无法改变算法.

我查阅它可能是一个数值稳定性问题: 一个生成正半定矩阵的简单算法 - 答案2.

什么是在这里继续前进的好方法?

Mar*_*n B 7

我会做矩阵的特征分解:

C=Q D Q^-1
Run Code Online (Sandbox Code Playgroud)

如果你的矩阵确实是半正的,那么所有的特征值(D对角线上的条目)都应该是非负的.(这可能是您的因子分析算法正在进行的测试,以查看矩阵是否为正半定.)

如果你遇到数字问题,一些特征值可能只会小于零.尝试将这些条目设置为零,计算Q D Q^-1得到一个新的,更正的C,然后将其提交给因子分析算法.

另一方面,如果你发现你的矩阵C具有真正的负特征值,那么你就知道你在C的构造中出错了.

  • 这绝对是在数值误差范围内.您是否可以访问因子分析例程的源代码?它本身可能正在进行特征分解 - 在这种情况下,您可以简单地修改代码以允许轻微的负特征值.否则,使用我上面建议的方法 - 但要注意,再次将`QDQ ^ -1'相乘后,您可能会得到新的数值误差,使您的特征值再次略低于零.在这种情况下,您可以尝试的一件事是使特征值非常略微正,而不是恰好为零. (3认同)

小智 5

由于无法发表评论,我将不得不回应 SplittingField 的评论,挑剔的是,形成 C=TD*TD' 是TD 条件数的平方,而不是它的两倍。与求 C 的特征分解等效且更稳定的方法是对 TD 执行奇异值分解 (SVD)。您将获得条件数作为奖励:最大奇异值与最小奇异值的比率是矩阵的条件数,其以 10 为底的对数是对您将损失多少小数位数的估计您在计算中使用了 C(当然,如果最小的奇异值是 0,则您的问题是奇异的!)