我有一个预提取文本文件的文件夹(来自图像,pdf,docs等的数据)。全部约222mb或27,600个文档。
该文件夹被编译成字典:
data = {'file_name':'document text',...}
然后我将字典矢量化
X = vectorizer.fit_transform(documents.values())
X = X.toarray()
将“ X”导出到文本文件表明它的大小约为7gb!
我尝试使用PCA将矢量化数据转换为2D阵列
pca = PCA(n_components=2)
two_dim = pca.fit_transform(X)
我开始出现以下错误:
two_dim = pca.fit_transform(vectorized_data)
array = np.array(array, dtype=dtype, order=order)
MemoryError
据我所知,我正在使用64位Python。我运行了$ py -0,而星号紧挨着64位版本。
我有32Gb内存,一个Intel i7-8700K
答案 0 :(得分:0)
您可以尝试以可管理的批量大小使用sklearn的IncrementalPCA,也可以使用具有线性激活功能(https://stats.stackexchange.com/questions/120080/whatre-the-differences-between-pca-and-autoencoder)的自动编码器,因为也可以批量训练自动编码器。但是,大小的增加是由于文本数据的稀疏性,因为矢量化生成的矩阵主要包含零。而且这种增加使您无法处理PCA。希望对您有所帮助。
答案 1 :(得分:0)
为什么要toarray
?
文本数据是稀疏,您要使用稀疏矩阵。
您还将希望使用 spherical k均值而非标准kmeans。
PCA也不是个好主意。