scikit学习如何对libsvm格式的稀疏数据执行PCA



我正在使用scikit学习来执行一些降维任务。我的训练/测试数据是libsvm格式的。它是一个50万列的大型稀疏矩阵。

我使用load_svmlight_file函数加载数据,通过使用SparsePCA,scikit学习抛出了输入数据错误的异常。

如何修复?

稀疏PCA是一种用于在密集数据上找到稀疏分解(组件具有稀疏性约束)的算法。

如果你想对稀疏数据进行普通PCA,你应该使用sklearn.decomposition.RandomizedPCA,它实现了一种可扩展的近似方法,既适用于稀疏数据,也适用于密集数据

IIRC sklearn.decomposition.PCA目前仅适用于密集数据。例如,将来可以通过将稀疏数据矩阵上的SVD计算委托给arpack来增加对稀疏数据的支持。

编辑:如注释中所述,不推荐使用RandomizedPCA的稀疏输入:相反,您应该使用sklearn.decomposition.TruncatedSVD,它与RandomizedPCA在稀疏数据上所做的完全相同,但最初不应该被称为PCA

澄清一下:PCA在数学上被定义为将数据居中(去除每个特征的平均值),然后在居中的数据上应用截断的SVD。

由于数据居中会破坏稀疏性,并迫使密集表示不再适合内存,因此通常直接对稀疏数据进行截断SVD(不居中)。这类似于PCA,但并不完全相同。这在scikit learn中实现为sklearn.decomposition.TruncatedSVD

编辑(2019年3月):正在进行的工作是在具有隐式居中的稀疏数据上实现PCA:https://github.com/scikit-learn/scikit-learn/pull/12841

相关内容

  • 没有找到相关文章

最新更新