【问题标题】:Memory Error Using scikit-learn on Predicting but Not Fitting使用 scikit-learn 进行预测但不拟合的内存错误
【发布时间】:2014-05-25 22:39:30
【问题描述】:

我正在使用来自 scikit-learn 的 TfidfVectorizer 对文本数据进行分类。

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

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

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

我已经尝试做一些事情来规避这种情况,但都没有运气。首先,我尝试使用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 learn 0.15(出血边缘)和 windows 8。

我有 8 GB RAM 和一个有 100 GB 可用空间的硬盘。为了这个项目的目的,我将我的虚拟 RAM 设置为 50 GB。如果需要,我可以将我的虚拟 RAM 设置得更高,但我正在尝试理解问题,然后才像过去几天那样强硬尝试解决方案……我尝试了一些不同的分类器:主要是@ 987654324@、Perception、MultinomialNB 和 LinearSVC。

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

【问题讨论】:

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

标签: python memory scikit-learn classification


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-05-26
    • 2013-05-31
    • 2015-08-01
    • 2017-08-13
    • 2014-05-31
    • 2018-02-15
    • 2018-01-14
    • 2019-01-08
    • 2020-11-05
    相关资源
    最近更新 更多