Sklearn中的PCA内存错误:替代暗淡减少?

Chr*_*rry 8 python multidimensional-array pca scikit-learn

我试图在Sklearn中使用PCA来减小非常大的矩阵的维数,但它会产生内存错误(RAM需要超过128GB).我已经设置了copy = False,而我正在使用计算成本较低的随机PCA.

有解决方法吗?如果没有,我可以使用哪些其他暗淡减少技术需要更少的内存.谢谢.


更新:我尝试PCA的矩阵是一组特征向量.它来自于通过预训练的CNN传递一组训练图像.矩阵是[300000,51200].尝试了PCA组件:100到500.

我想减少它的维度,所以我可以使用这些功能来训练ML算法,例如XGBoost.谢谢.

Chr*_*rry 6

最后,我使用TruncatedSVD而不是PCA,它能够处理没有内存问题的大型矩阵:

from sklearn import decomposition

n_comp = 250
svd = decomposition.TruncatedSVD(n_components=n_comp, algorithm='arpack')
svd.fit(train_features)
print(svd.explained_variance_ratio_.sum())

train_features = svd.transform(train_features)
test_features = svd.transform(test_features)
Run Code Online (Sandbox Code Playgroud)

  • 只是将其添加为附注,但是您如何仍然能够计算出正确的结果?AFAIK,PCA将数据居中,这对于TruncatedSVD必须手动进行。 (2认同)

Viv*_*vek 5

您可以使用IncrementalPCASK learn 中提供的内容。from sklearn.decomposition import IncrementalPCA。其余界面与 相同PCA。您需要传递一个额外的参数batch_size,该参数需要 <= #components。

然而,如果需要应用非线性版本,例如KernelPCA似乎不支持类似的东西。KernelPCA它的内存需求绝对会爆炸,请参阅维基百科上有关非线性降维的文章