Python PCA分析引发了内存分配问题。如何在不降低图像分辨率或图像数量的情况下解决此问题

Python PCA分析引发了内存分配问题。如何在不降低图像分辨率或图像数量的情况下解决此问题,python,image,pca,feature-extraction,Python,Image,Pca,Feature Extraction,使用PCA(主成分分析)从一组4K图像中提取特征,这给了我记忆错误 文件“/home/paul90/.local/lib/python3.6/site packages/sklearn/decomposition/_pca.py”,第369行,在fit_transform中 U、 S,V=自拟合(X) MemoryError:无法分配具有形状(23339520,40)和数据类型float32的数组 我试图从4K图像中提取30个特征(组件),并得到这个错误 伪代码: immatrix=np.a

使用PCA(主成分分析)从一组4K图像中提取特征,这给了我记忆错误

文件“/home/paul90/.local/lib/python3.6/site packages/sklearn/decomposition/_pca.py”,第369行,在fit_transform中 U、 S,V=自拟合(X)

MemoryError:无法分配具有形状(23339520,40)和数据类型float32的数组

我试图从4K图像中提取30个特征(组件),并得到这个错误

  • 伪代码:
immatrix=np.array([np.array(Image.open(im,'r')).flatte(),用于文件列表中的im],'f')

x=StandardScaler().fit_变换(immatrix)

pc\u train=pca.fit\u变换(x)

Filelist是图像列表(目前我有600个图像)

我无法减少列表中的图像数量,也无法降低初始4K分辨率。在这种情况下,如何解决内存分配问题


如果有人能告诉我避免内存问题的步骤,那将是一个很大的帮助。

正如这个问题所述,您必须重新配置您的系统,使更多的RAM可用于运行时系统


但是,我怀疑您可以通过迭代图像来解决这个问题,而不是将所有图像加载到一个大的NumPy数组中。与使用单片处理工具不同,您需要编写代码以串行方式执行相同的计算。

大型数据集无法装入内存是很常见的,因此像PCA这样的操作无法以纯粹的理论方式执行。还有另一个PCA函数,sklearn称之为增量PCA,可以将其视为一个需要批量处理的模型。由于您并没有完整的代码可查看,所以我将只复制其中的一部分,它同时执行PCA和增量PCA,这样您就知道了。该方法的文档如下所示

# Authors: Kyle Kastner
# License: BSD 3 clause

import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import load_iris
from sklearn.decomposition import PCA, IncrementalPCA

iris = load_iris()
X = iris.data
y = iris.target

n_components = 2
ipca = IncrementalPCA(n_components=n_components, batch_size=10)
X_ipca = ipca.fit_transform(X)

pca = PCA(n_components=n_components)
X_pca = pca.fit_transform(X)