我正在使用scikit学习来执行一些降维任务。我的训练/测试数据是libsvm格式的。它是一个50万列的大型稀疏矩阵。
我使用load_svmlight_file函数加载数据,通过使用SparsePCA,scikit学习抛出了输入数据错误的异常。
如何修复?
稀疏PCA是一种用于在密集数据上找到稀疏分解(组件具有稀疏性约束)的算法。
sklearn.decomposition.RandomizedPCA
,它实现了一种可扩展的近似方法,既适用于稀疏数据,也适用于密集数据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