【问题标题】:Why in doing PCA, scikit-learn use svd to get eigenvalue while the traditional method is to use eig?为什么在做 PCA 时,scikit-learn 使用 svd 获取特征值,而传统方法是使用 eig?
【发布时间】:2017-07-06 13:47:35
【问题描述】:

当我用 scikit-learn 做 PCA 时,我发现它使用 svd 得到eigenvalueeigenvector,然后使用svd_flip 得到真正的特征向量。

这是我获取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函数不是很熟悉,你能告诉我它的用法吗?

非常感谢。

【问题讨论】:

标签: scikit-learn pca


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 2017-07-08
    • 1970-01-01
    • 2021-12-23
    • 2016-10-11
    • 2014-07-30
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多