Memory management sklearn中的矢量化似乎非常耗费内存。为什么?

Memory management sklearn中的矢量化似乎非常耗费内存。为什么?,memory-management,scikit-learn,feature-extraction,Memory Management,Scikit Learn,Feature Extraction,我需要处理超过1000000条文本记录。我正在使用CountVectorizer转换我的数据。我有以下代码 TEXT = [data[i].values()[3] for i in range(len(data))] #these are the text records from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer(min_df=1) X = vectorize

我需要处理超过1000000条文本记录。我正在使用CountVectorizer转换我的数据。我有以下代码

TEXT = [data[i].values()[3] for i in range(len(data))] #these are the text records

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer(min_df=1)
X = vectorizer.fit_transform(TEXT)


X_list = X.toarray().tolist()
当我运行这段代码时,结果是
MemoryError
。我的文字记录大多是短小的段落(~100字)。矢量化似乎非常昂贵

更新

我向CountVectorier添加了更多约束,但仍然得到MemoryError。
功能名称的长度为2391

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer(min_df=0.003,max_df = 3.05, lowercase = True, stop_words = 'english')
X = vectorizer.fit_transform(TEXT)
feature_names = vectorizer.get_feature_names()

X_tolist = X.toarray().tolist()

Traceback (most recent call last):
File "nlp2.py", line 42, in <module>
X_tolist = X.toarray().tolist()
File "/opt/conda/lib/python2.7/site-packages/scipy/sparse/compressed.py", line 940, in toarray
return self.tocoo(copy=False).toarray(order=order, out=out)
File "/opt/conda/lib/python2.7/site-packages/scipy/sparse/coo.py", line 250, in toarray
B = self._process_toarray_args(order, out)
File "/opt/conda/lib/python2.7/site-packages/scipy/sparse/base.py", line 817, in _process_toarray_args
return np.zeros(self.shape, dtype=self.dtype, order=order)
MemoryError
来自sklearn.feature\u extraction.text import countvectorier
矢量器=计数矢量器(最小值=0.003,最大值=3.05,小写值=True,停止词=english)
X=矢量器。拟合_变换(文本)
feature\u names=矢量器。获取\u feature\u names()
X_tolist=X.toarray().tolist()
回溯(最近一次呼叫最后一次):
文件“nlp2.py”,第42行,在
X_tolist=X.toarray().tolist()
文件“/opt/conda/lib/python2.7/site packages/scipy/sparse/compressed.py”,第940行,在toarray中
返回self.tocoo(copy=False).toarray(order=order,out=out)
文件“/opt/conda/lib/python2.7/site packages/scipy/sparse/coo.py”,第250行,在toarray中
B=自。\处理\到阵列\参数(订单、输出)
文件“/opt/conda/lib/python2.7/site packages/scipy/sparse/base.py”,第817行,在进程参数中
返回np.zero(self.shape,dtype=self.dtype,order=order)
记忆者

为什么会这样?如何处理?谢谢

您的问题是X是一个稀疏矩阵,每个文档一行表示该文档中存在哪些单词。如果您有一百万个文档,总共有2391个不同的单词(如您的问题中所提供的功能名称的长度),那么x密集版本中的条目总数大约为20亿,足以导致内存错误


问题在于这一行
X\u list=X.toarray().tolist()
,它将X转换为密集数组。你没有足够的记忆,应该有办法做你想做的事,(由于稀疏版本的X具有您所需的所有信息。

您能让我们访问您的数据集吗?还有,内存错误在哪一行?您能给我们跟踪吗?谢谢bpachev,我不知道如何让您访问数据集,因为它位于具有安全性的远程服务器中。只有当我执行
X\u list=X.t时,内存错误才会出现。)oarray().tolist()
我被告知要设置min和max_df。我只有min。是的,确实是这样。稀疏版本的X包含了我需要的所有信息——我一直在转换任何时候需要的模型,最终意识到这是不必要的。我以一种艰难的方式学会了它。