Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用scikit学习预测但不拟合时出现记忆错误_Python_Memory_Scikit Learn_Classification - Fatal编程技术网

Python 使用scikit学习预测但不拟合时出现记忆错误

Python 使用scikit学习预测但不拟合时出现记忆错误,python,memory,scikit-learn,classification,Python,Memory,Scikit Learn,Classification,我正在使用scikit learn中的TfidfVectorizer对文本数据进行分类 我将数据集转换为一个75k×172k的稀疏矩阵,其中存储了865k的元素。(我使用的ngrams范围为1,3) 我可以在很长一段时间后拟合我的数据,但它仍然确实适合 然而,当我试图预测测试集时,我会遇到内存问题。为什么会这样?我认为记忆最密集的部分应该是预测 我尝试过做一些事情来规避这个问题,但没有成功。首先,我尝试使用joblib.dump本地转储数据,退出python并重新启动。不幸的是,这不起作用 然后

我正在使用scikit learn中的
TfidfVectorizer
对文本数据进行分类

我将数据集转换为一个75k×172k的稀疏矩阵,其中存储了865k的元素。(我使用的ngrams范围为1,3)

我可以在很长一段时间后拟合我的数据,但它仍然确实适合

然而,当我试图预测测试集时,我会遇到内存问题。为什么会这样?我认为记忆最密集的部分应该是预测

我尝试过做一些事情来规避这个问题,但没有成功。首先,我尝试使用
joblib.dump
本地转储数据,退出python并重新启动。不幸的是,这不起作用

然后我尝试切换到哈希向量器,但具有讽刺意味的是,哈希向量器会导致同一数据集上的内存问题。我觉得散列向量器会更有内存效率

hashing = HashingVectorizer(analyzer='word',ngram_range=(1,3))
tfidf = TfidfVectorizer(analyzer='word',ngram_range=(1,3))

xhash = hashing.fit_transform(x)
xtfidf = tfidf.fit_transform(x)

pac.fit(xhash,y) # causes memory error
pac.fit(xtfidf,y) # works fine
我正在使用scikit学习0.15(前沿)和windows 8

我有8 GB的RAM和一个有100 GB可用空间的硬盘。为了这个项目,我将我的虚拟RAM设置为50GB。如果需要,我可以将我的虚拟RAM设置得更高,但我正在尝试在使用钝器之前理解问题,尝试解决方案,就像我过去几天所做的那样……我尝试了几种不同的分类器:大多数是
PassiveAggressiveClassifier
Perception
多项式nb
,以及
LinearSVC


我还应该注意到,有一次我使用了一个350k×472k的稀疏矩阵,存储了12M个元素。尽管需要一些时间,我仍然能够拟合数据。但是,在预测时会出现内存错误。

scikit学习库经过了高度优化(并使用NumPy和SciPy)
TfidVectorizer
存储稀疏矩阵(与标准密集矩阵相比,其大小相对较小)

如果您认为这是内存问题,则可以在创建
tfidfvectorier
时设置
max\u features
属性。这可能有助于检查你的假设 (有关
Tfidfvectorizer
的更多详细信息,请参阅)


此外,我可以建议您减少训练集,并再次检查;它还可以用于检查您的假设。

您的测试集有多大?什么是
pac
?看起来可能是PassiveAggressiveClassifier@larsmans我的测试集是105k样本量,pac是被动-攻击分类器