Scikit learn 为什么在进行PCA时,scikit学习使用svd来获取特征值,而传统方法是使用eig?

Scikit learn 为什么在进行PCA时,scikit学习使用svd来获取特征值,而传统方法是使用eig?,scikit-learn,pca,Scikit Learn,Pca,当我使用scikit learn进行PCA时,我发现它使用svd获得特征值和特征向量,然后使用svd_flip获得真实的特征向量 这是我的代码,可以得到特征值和特征向量 pca = PCA(data.shape[1]) newData = pca.fit_transform(data) eigenvalue, eigenvector = np.linalg.eig(np.cov(data.transpose())) explained_variance_ratio_sum_ = np.cumsu

当我使用scikit learn进行PCA时,我发现它使用svd获得
特征值
特征向量
,然后使用
svd_flip
获得真实的特征向量

这是我的代码,可以得到
特征值
特征向量

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\u flip
函数,你能告诉我它的用法吗


非常感谢。

scikit learn使用的基于SVD的方法不必在内存中具体化经验协方差矩阵,因此内存效率更高


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

这可能不是讨论算法的合适地方。请看一看