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.谢谢.
最后,我使用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)
您可以使用IncrementalPCA
SK learn 中提供的内容。from sklearn.decomposition import IncrementalPCA
。其余界面与 相同PCA
。您需要传递一个额外的参数batch_size
,该参数需要 <= #components。
然而,如果需要应用非线性版本,例如KernelPCA
似乎不支持类似的东西。KernelPCA
它的内存需求绝对会爆炸,请参阅维基百科上有关非线性降维的文章