使用 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

使用 TfidfVectorizer 和 Scikit-learn 的 TF-IDF 与 SVM 的低准确度

scikit-learn/svm - 在“predict_proba”之后获取概率和相关标签