我正在使用scikit-learning做一些降维任务。 我的训练/测试数据采用libsvm格式。它是一个50万列的大型稀疏矩阵。
我使用load_svmlight_file函数加载数据,并且通过使用SparsePCA,scikit-learning抛出了输入数据错误的异常。
如何解决?
答案 0 :(得分:15)
稀疏PCA是一种在密集数据上查找稀疏分解(组件具有稀疏性约束)的算法。
如果您想对稀疏数据执行vanilla 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