2017-02-17 21 views
-1

虽然我在用scikit-learn进行PCA时,发现它使用svd来获得eigenvalueeigenvector,然后使用svd_flip来获得真正的特征向量。为什么在做PCA时,scikit-learn使用svd来获得特征值,而传统的方法是使用eig?

这里是我的代码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函数不太熟悉,你会告诉我它的用法吗?

非常感谢。

+0

这可能不是讨论算法的正确位置。请查看https://stats.stackexchange.com/questions/79043/why-pca-of-data-by-means-of-svd-of-the-data –

回答

0

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

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

相关问题