PCA和TruncatedSVD的scikit-learn实现之间的区别


12

我了解主成分分析和奇异值分解在代数/精确水平之间的关系。我的问题是关于scikit-learn的实现

该文档说:“ [TruncatedSVD]与PCA非常相似,但是直接对样本矢量进行运算,而不是对协方差矩阵进行运算。 ”,这将反映两种方法之间的代数差异。但是,后来又说:“ 此估算器[TruncatedSVD]支持两种算法:快速随机SVD求解器,和“天真”算法,该算法使用ARPACK作为(X * XT)或(XT * X)上的特征求解器,高效。关于PCA,它表示:“使用数据的奇异值分解来投影以减少线性维数……”。PCA实施支持相同的两种算法(随机和ARPACK)求解器以及另一种算法LAPACK。查看代码,我可以看到PCA和TruncatedSVD中的ARPACK和LAPACK都对样本数据X进行了svd,ARPACK能够处理稀疏矩阵(使用svds)。

因此,除了具有不同的属性和方法之外,PCA还可以使用LAPACK进行精确的全奇异值分解,PCA和TruncatedSVD scikit-learn实现似乎是完全相同的算法。第一个问题:这是正确的吗?

第二个问题:即使LAPACK和ARPACK使用scipy.linalg.svd(X)和scipy.linalg.svds(X)作为X样本矩阵,它们也会计算X的奇异值分解或特征分解X T内部。虽然“随机化”的求解器不需要计算乘积。(这与数值稳定性有关,请参阅为什么通过数据的SVD对数据进行PCA?)。这个对吗?XTXXXT

相关代码:PCA行415。截断SVD行137。


1
您可以加入一个链接代码
seanv507

1
德雷克-我想我同意第一个问题。第二个问题不理解。您是什么意思?“他们在内部计算XT * XXT * X或X * XTX * XT的奇异值分解或特征分解”-您刚刚显示了在X上使用SVD完成代码的代码吗?-数值问题是指首先计算协方差矩阵(称为C),然后找到C的特征向量
seanv507

XTXXXT

1
XXtimes()Xt_times()

@ GeoMatt22您能详细说明一下吗?您是说ARPACK或LAPACK方法不会因为不需要计算协方差矩阵而受到数值不稳定性的困扰吗?
德雷克,2016年

Answers:


13

PCA和TruncatedSVD scikit-learn实现似乎是完全相同的算法。

否:PCA 在中心数据上(被截断)为SVD (按特征平均减法)。如果数据已经居中,则这两个类将执行相同的操作。

在实践TruncatedSVD中,对于无法使内存使用量激增而无法居中的大型稀疏数据集很有用。

  • numpy.linalg.svd并且scipy.linalg.svd都依赖于此处描述的LAPACK _GESDD:http : //www.netlib.org/lapack/lug/node32.html(分而治之的驱动程序)

  • scipy.sparse.linalg.svds依靠ARPACK对XT进行特征值分解。X或X。通过Arnoldi迭代方法进行XT(取决于数据的形状)。ARPACK的HTML用户指南的格式已损坏,隐藏了计算细节,但Arnoldi迭代在Wikipedia上已得到很好的描述:https//en.wikipedia.org/wiki/Arnoldi_iteration

这是scipy中基于ARPACK的SVD的代码:

https://github.com/scipy/scipy/blob/master/scipy/sparse/linalg/eigen/arpack/arpack.py#L1642(如果源代码中的行发生更改,搜索“ def svds”的字符串)。


2
一个可以有效地支持稀疏数据(TruncatedSVD),另一个则不能(PCA)。这就是为什么我们有2个班级的原因。
ogrisel

1
如果那是原因,那么我将它们称为SVD和SparseSVD(或类似名称)以避免混淆。
德雷克2016年

2
但是人们想要PCA,他们可能不知道PCA只是中心数据上的SVD。
ogrisel

5
@drake我不同意“过程不同(PCA使用协方差矩阵,而SVD使用数据矩阵)”。PCA是分析类型的名称。可以使用不同的算法和实现方式来执行它。cov矩阵的EIG是一种方法,中心数据矩阵的SVD是另一种方法,然后EIG和SVD也可以通过各种方法执行。没关系-所有这些都是PCA。
变形虫说恢复莫妮卡

1
@amoeba感谢您对术语的澄清/更正。您说的对我来说更有意义,因为SVD和EIG是比PCA范围更广的代数定理/方法
德雷克2016年
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.