内存错误使用scikit-learn预测但不适合

时间:2014-04-11 16:48:48

标签: python memory scikit-learn classification

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

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

我可以在很长一段时间后使用我的数据,但它确实适合。

但是,当我尝试预测测试集时,我会遇到内存问题。为什么是这样?我认为最大的内存密集部分是不适合不预测的?

我试过做一些事情来规避这个但却没有运气。首先,我尝试使用joblib.dump在本地转储数据,退出python并重新启动。遗憾的是,这并没有奏效。

然后我尝试切换到HashingVectorizer,但具有讽刺意味的是,散列矢量化器会在同一数据集上导致内存问题。我的印象是Hashing Vectorizer会更节省内存吗?

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存储元素。尽管花了一些时间,我仍然能够适应数据。但是在预测时会出现内存错误。

1 个答案:

答案 0 :(得分:0)

scikit-learn库经过了强有力的优化(并使用了NumPy和SciPy)。 TfidVectorizer存储稀疏矩阵(与标准密集矩阵相比,尺寸相对较小)。

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

另外,我可以建议您减少训练集,并再次检查;它也可以用来检查你的假设。