Answers:
当使用协方差矩阵时,Cholesky分解对于最佳稳定性和速度最有意义,因为协方差矩阵将是正半定对称矩阵。霍尔斯基在这里很自然。但...
如果您打算计算Cholesky因式分解,请在计算协方差矩阵之前帮自己一个忙。通过计算矩阵的QR因式分解,最大程度地解决问题。(QR也很快。)也就是说,如果您将协方差矩阵计算为
在的列均值已删除的情况下,然后看到当您形成C时,它将条件号平方。更好的方法是形成A的QR因子,而不是显式计算A T A的Cholesky分解。
由于Q是正交的
因此,我们可以直接从QR分解中以的形式获得Cholesky因子。如果Q稀少QR分解是可用的,这甚至是更好,因为你不需要Q。无Q的 QR是快速计算的,因为从不生成Q。它仅是Householderer转换的序列。(在逻辑上,以Q为中心的无Q QR 列将更加稳定,以选择枢轴为代价。)
在这里使用QR的最大优点是它在棘手问题上在数值上高度稳定。同样,这是因为我们不必直接形成协方差矩阵来计算Cholesky因子。一旦形成乘积,就对矩阵的条件数求平方。实际上,您会在最初没有多少信息的那部分矩阵中丢失信息。
最后,正如另一个回应指出的那样,您甚至根本不需要计算和存储逆,而可以在三角系统上以反演形式隐式使用它。
我最近使用mathSE的建议进行了此操作。
我认为大多数人都推荐使用SVD,但是我选择了Cholesky的简单性:
如果矩阵,那么我使用Cholesky 将分解为三角矩阵,这样。然后,我使用反向替换或正向替换(取决于我选择L为上三角形还是下三角形)来反转,这样我就有。据此,我可以快速计算。
从...开始:
,其中是已知的,并且是隐对称的,也是正定的。
霍莱斯基分解:
,其中是正方形且非奇异
换人:
,可能是反转的最快方法(不过请不要引用我)
乘法:
使用的符号: 低位索引是行,高位索引是列,是的转置
我的Cholesky算法(可能来自数字食谱或维基百科)
这几乎可以就地完成(您只需要临时存储对角线元素,一个累加器和一些整数迭代器)。
我的替代算法(从数值食谱中检查其版本,因为我可能对LaTeX标记有误)
当出现在表达式中时,在矩阵上进行迭代的顺序很重要(结果矩阵的某些部分取决于必须事先计算的其他部分)。检查数字食谱代码以获取代码中的完整示例。[编辑]:实际上,只需检查数字食谱示例。通过使用点积,我已经过分简化了,以至于上述等式具有循环依赖性,无论您迭代的顺序如何...