Python Sklearn中的PCA内存错误:可选的减暗?

Python Sklearn中的PCA内存错误:可选的减暗?,python,multidimensional-array,scikit-learn,pca,Python,Multidimensional Array,Scikit Learn,Pca,我试图在Sklearn中使用PCA降低一个非常大的矩阵的维数,但它会产生一个内存错误(所需RAM超过128GB)。我已经设置了copy=False,我正在使用计算成本较低的随机PCA 有解决办法吗?如果没有,我可以使用哪些其他需要更少内存的减暗技术。多谢各位 更新:我正在尝试PCA的矩阵是一组特征向量。它来自通过预先训练的CNN传递一组训练图像。矩阵为[30000051200]。试过的PCA成分:100到500 我想降低它的维数,这样我就可以使用这些特性来训练ML算法,比如XGBoost。谢谢

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

有解决办法吗?如果没有,我可以使用哪些其他需要更少内存的减暗技术。多谢各位


更新:我正在尝试PCA的矩阵是一组特征向量。它来自通过预先训练的CNN传递一组训练图像。矩阵为[30000051200]。试过的PCA成分:100到500


我想降低它的维数,这样我就可以使用这些特性来训练ML算法,比如XGBoost。谢谢。

最后,我使用了TruncatedSVD而不是PCA,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)

您可以使用SK learn中提供的
IncrementalPCA
<代码>从sklearn.decomposition导入增量ALPCA。界面的其余部分与PCA相同。您需要传递一个额外的参数
batch\u size
,这需要让我想到。为什么要降低维度?你想用这个矩阵实现什么?它是密集矩阵吗?请提供更多信息:您使用的组件数量、输入数据集大小等。您可以尝试某种类型的功能缩减技术,以从集合中删除任何冗余/非信息性功能。您建议使用什么功能缩减技术?谢谢。我在使用KernelPCA约简时遇到了同样的问题。如何以非线性方式解决它?只是作为旁注添加这个,但是您如何仍然能够计算正确的结果?好的,PCA将数据集中,您必须手动执行截断SVD。
import numpy as np
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1)
mnist.target = mnist.target.astype(np.uint8)

# Split data into training and test
X, y = mnist["data"], mnist["target"]
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
del mnist

# Use Incremental PCA to avoid MemoryError: Unable to allocate array with shape
from sklearn.decomposition import IncrementalPCA
m, n = X_train.shape
n_batches = 100
n_components=154

ipca = IncrementalPCA(
    copy=False,
    n_components=n_components,
    batch_size=(m // n_batches)
)
X_train_recuced_ipca = ipca.fit_transform(X_train)