当我使用scikit-learn进行PCA时,我发现它使用svd来获取eigenvalue
和eigenvector
,然后使用svd_flip
来获取真实的特征向量。< / p>
这是获取eigenvalue
和eigenvector
的代码。
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 :(得分:0)
scikit-learn使用的基于SVD的方法不必实现内存中的经验协方差矩阵,因此更有效。
从计算时间的角度来看,它应该非常相似,尽管我没有检查过。