【发布时间】:2015-02-15 05:48:41
【问题描述】:
我正在尝试使用 scikit-learn 将一堆数据(带有情感标签的推文)插入 SVM。我一直在使用 CountVectorizer 来构建一个稀疏的字数数组,并且对于小型数据集(约 5000 条推文)都可以正常工作。但是,当我尝试使用更大的语料库(理想情况下是 150,000 条推文,但我目前正在探索 15,000 条)时,.toarray() 将稀疏格式转换为更密集的格式,立即开始占用大量内存(30k 条推文在 MemoryError 之前命中超过 50gb。
所以我的问题是——有没有办法将LinearSVC() 或 SVM 的另一种表现形式提供给稀疏矩阵?我是否必须使用密集矩阵?似乎不同的矢量化器无法解决这个问题(因为这个问题似乎可以通过:MemoryError in toarray when using DictVectorizer of Scikit Learn 解决)。不同的模型是解决方案吗?似乎所有 scikit-learn 模型在某些时候都需要密集的数组表示,除非我一直在寻找错误的地方。
cv = CountVectorizer(analyzer=str.split)
clf = svm.LinearSVC()
X = cv.fit_transform(data)
trainArray = X[:breakpt].toarray()
testArray = X[breakpt:].toarray()
clf.fit(trainArray, label)
guesses = clf.predict(testArray)
【问题讨论】:
标签: python scipy nlp scikit-learn svm