为什么在做PCA时,scikit-learn使用svd来获取特征值,而传统的方法是使用eig?

时间:2017-02-17 06:42:21

标签: scikit-learn pca

当我使用scikit-learn进行PCA时,我发现它使用svd来获取eigenvalueeigenvector,然后使用svd_flip来获取真实的特征向量。< / p>

这是获取eigenvalueeigenvector的代码。

pca = PCA(data.shape[1])
newData = pca.fit_transform(data)
eigenvalue, eigenvector = np.linalg.eig(np.cov(data.transpose()))
explained_variance_ratio_sum_ = np.cumsum(pca.explained_variance_ratio_)

index = eigenvalue.argsort()[::-1]
eigenvalue = eigenvalue[index]
eigenvector = eigenvector[:, index]

为什么sklearn使用svd?有任何优点或缺点吗?我对svd_flip函数不是很熟悉,你能告诉我它的用法吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

scikit-learn使用的基于SVD的方法不必实现内存中的经验协方差矩阵,因此更有效。

从计算时间的角度来看,它应该非常相似,尽管我没有检查过。