什么是计算奇异值分解(SVD)的有效算法?


17

维基百科有关主成分分析的文章指出:

存在有效的算法来计算的SVD,而不必形成矩阵X T X,因此,计算SVD现在是从数据矩阵计算主成分分析的标准方法,除非只需要少量的成分。XXŤX

有人可以告诉我本文讨论的有效算法是什么?没有提供参考(建议使用这种计算方式的文章的URL或引用会很好)。


4
Google搜索的奇异值分解算法可以很好地突出显示相关信息。
ub

1
不要忘记在PCA的SVD之前删除均值!
2014年

试试Lanczos SVD!
ciri 2015年

Answers:


12

SVD计算背后的主要工作是QR算法。话虽这么说,但有许多不同的算法可以计算通用 × N矩阵A的奇异值分解。上可用的问题,一个伟大的原理在这里(从英特尔的文档MKL)如下:中号ñ一种在此处输入图片说明

如您所见,根据您的用例,有不同的方法(可以在此处找到常规的命名约定)。这是因为,例如,存在矩阵形式,其中Householder缩减Givens旋转更昂贵(举两个“明显”的获取QR方式)。关于此问题的标准参考是Golub和Van Loan的Matrix Computations(我建议至少使用第3版)。我也找到了Å。比约克最小二乘问题数值方法在这个问题上是很好的资源。尽管SVD并不是本书的主要重点,但它有助于将其使用情境化。

如果我必须就此问题提供一个一般性建议,请不要尝试编写自己的SVD算法,除非您已经在数值线性代数上成功学习了两门课,并且知道自己在做什么。我知道这听起来是违反直觉的,但实际上,有很多东西可能出错,最终您(最好)得到了次优的实现(如果没有错的话)。有一些非常好的免费套件(例如EigenArmadilloTrilinos等等)。


X一种

1
中号ñ一种XŤX

2
是的,我错了:QR并不限于平方矩阵。+1,顺便说一句。这个问题是带有pca标签的投票最高的未解答问题之一,因此很高兴看到它最终得到回答。
变形虫说恢复莫妮卡

您的答案没有提及各种各样的迭代算法。是故意的吗?有人问了有关迭代SVD算法的问题,请参阅存在哪些用于计算截短SVD的快速算法?,我在那里发布了一个答案,试图提供一些概述。也许我们至少应该使我们的答案相互关联。如果您可以通过讨论QR算法与迭代算法来扩展自己的知识,那肯定会很棒。
变形虫说莫妮卡(Reonica Monica)还原2015年

不,这是偶然的。不过,您在帖子中回答了自己的问题;截断的SVD本质上是截断的特征分解(例如,参见ARPACK)。有一些细微的差别,但是很好 ; 一些软件(例如MATLAB的软件svds)甚至可以简单地将其截断的SVD函数用作其截断的特征分解(eigs)例程的包装器。
usεr11852恢复单胞菌说,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.