在scikitlearn中将数据加载到SVC模型时尝试避免.toarray()

2024-10-01 22:32:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用scikitlearn将一堆数据(带有情绪标签的tweets)插入到支持向量机中。我一直在使用CountVectorizer来构建一个稀疏的字数数组,对于较小的数据集(大约5000条tweets),它都可以很好地工作。然而,当我尝试使用更大的语料库(理想情况下是150000条tweets,但我目前正在使用15000条tweets),它将稀疏格式转换为更密集的格式,它会立即占用大量内存(在MemoryError之前,有30k条tweet命中50gb以上)。在

所以我的问题是——有没有办法给LinearSVC()或者支持向量机的另一种表现形式提供稀疏矩阵?我需要使用稠密矩阵吗?似乎不同的向量器并不能帮助解决这个问题(因为这个问题似乎是由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)

Tags: 数据格式矩阵数组向量cvtweetsfit
1条回答
网友
1楼 · 发布于 2024-10-01 22:32:41

^{}及其predict方法都可以将稀疏矩阵作为第一个参数处理,因此只需从代码中删除toarray调用就可以了。在

所有采用稀疏输入的估计器都记录在案。E、 g.LinearSVC的docstring声明:

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.

相关问题 更多 >

    热门问题