【发布时间】: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