【问题标题】:Trying to avoid .toarray() when loading data into an SVC model in scikit-learn在 scikit-learn 中将数据加载到 SVC 模型时尝试避免 .toarray()
【发布时间】: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


    【解决方案1】:

    LinearSVC.fit 及其predict 方法都可以将稀疏矩阵作为第一个参数处理,因此只需从代码中删除toarray 调用即可。

    所有采用稀疏输入的估计器都记录在案。例如,LinearSVC 的文档字符串声明:

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape = [n_samples, n_features]
        Training vector, where n_samples in the number of samples and
        n_features is the number of features.
    

    【讨论】:

    • 哇 - 我不敢相信我错过了,感谢您指出
    猜你喜欢
    • 2013-07-07
    • 2019-02-07
    • 1970-01-01
    • 2014-02-18
    • 2014-08-06
    • 2018-07-07
    • 2017-04-26
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多