Ale*_*oks 5 math matrix numerical-methods numerical-stability
我正在尝试对共生矩阵(C)进行因子分析,该矩阵是根据术语 - 文档矩阵(TD)计算的,如下所示:C = TD*TD'
理论上C应该是正半正定的,但事实并非如此,并且因子分析算法因此无法使用它.由于速度原因,我无法改变算法.
我查阅它可能是一个数值稳定性问题: 一个生成正半定矩阵的简单算法 - 答案2.
什么是在这里继续前进的好方法?
我会做矩阵的特征分解:
C=Q D Q^-1
Run Code Online (Sandbox Code Playgroud)
如果你的矩阵确实是半正的,那么所有的特征值(D对角线上的条目)都应该是非负的.(这可能是您的因子分析算法正在进行的测试,以查看矩阵是否为正半定.)
如果你遇到数字问题,一些特征值可能只会小于零.尝试将这些条目设置为零,计算Q D Q^-1得到一个新的,更正的C,然后将其提交给因子分析算法.
另一方面,如果你发现你的矩阵C具有真正的负特征值,那么你就知道你在C的构造中出错了.
小智 5
由于无法发表评论,我将不得不回应 SplittingField 的评论,挑剔的是,形成 C=TD*TD' 是TD 条件数的平方,而不是它的两倍。与求 C 的特征分解等效且更稳定的方法是对 TD 执行奇异值分解 (SVD)。您将获得条件数作为奖励:最大奇异值与最小奇异值的比率是矩阵的条件数,其以 10 为底的对数是对您将损失多少小数位数的估计您在计算中使用了 C(当然,如果最小的奇异值是 0,则您的问题是奇异的!)