记忆错误使用scikit学习预测但不拟合



我正在使用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设置为50 GB。如果需要,我可以将我的虚拟RAM设置得更高,但在像过去几天一样尝试解决方案之前,我正在努力了解问题。。。我尝试了几种不同的分类器:主要是PassiveAggressiveClassifierPerceptionMultinomialNBLinearSVC

我还应该注意到,有一次我使用了一个350k乘472k的稀疏矩阵,其中存储了12M个元素。尽管花了一些时间,我仍然能够拟合数据。然而,在预测时出现了记忆错误。

scikit学习库经过了严格优化(并使用NumPy和SciPy)。TfidVectorizer存储稀疏矩阵(与标准密集矩阵相比,尺寸相对较小)。

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

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

相关内容

  • 没有找到相关文章

最新更新