使用 Scikit Learn SVM 为文本分类准备数据
Posted
技术标签:
【中文标题】使用 Scikit Learn SVM 为文本分类准备数据【英文标题】:Prepare data for text classification using Scikit Learn SVM 【发布时间】:2012-12-06 05:40:02 【问题描述】:我正在尝试应用 Scikit learn 中的 SVM 对我收集的推文进行分类。 因此,将有两个类别,分别命名为 A 和 B。 目前,我将所有推文分类在两个文本文件中,“A.txt”和“B.txt”。 但是,我不确定 Scikit Learn SVM 要求什么类型的数据输入。 我有一个带有标签(A 和 B)作为键的字典和一个特征字典(一元组)和它们的频率作为值。 抱歉,我对机器学习真的很陌生,不知道应该怎么做才能让 SVM 工作。 我发现 SVM 使用 numpy.ndarray 作为其数据输入的类型。我需要根据自己的数据创建一个吗? 应该是这样的吗?
Labels features frequency
A 'book' 54
B 'movies' 32
感谢任何帮助。
【问题讨论】:
【参考方案1】:查看text feature extraction 上的文档。
还可以查看text classification example。
这里也有教程:
http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html
尤其不要过多关注 SVM 模型(尤其不是sklearn.svm.SVC
,这对内核模型更有趣,因此不是文本分类):一个简单的感知器、LogisticRegression 或伯努利朴素贝叶斯模型在训练速度更快。
【讨论】:
多项朴素贝叶斯/支持向量机都适合你。text classification example
的链接是 404
感谢报告我修复了损坏的链接。
@ogrisel:我正在尝试使用朴素贝叶斯的 10 个类,但对结果不满意。如果数据集很小,svm 非常适合,每个类大约 100 个句子
对于少量样本(例如少于 10000 个样本左右),SVC(kernel='linear')
可能足够快以收敛。然而,它应该提供与LinearSVC
相似的预测性能和与LogisticRegression
相当的性能,这应该更快并且可以扩展到数十万个样本。对于每种情况,您需要通过交叉验证为 C 选择最佳值。此外,LogisticRegression
默认提供良好的概率估计(使用predict_proba
方法)。这就是为什么我建议您默认使用线性模型而不是通用 SVC
。以上是关于使用 Scikit Learn SVM 为文本分类准备数据的主要内容,如果未能解决你的问题,请参考以下文章
Scikit learn - 如何使用 SVM 和随机森林进行文本分类?
使用 scikit-learn 训练数据时,SVM 多类分类停止
如何获得 scikit-learn SVM 分类器的所有 alpha 值?
使用 scikit-learn python 的线性 SVM 时出现 ValueError