使用Scikit Learn SVM为文本分类准备数据

11

我正在尝试使用 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个回答

21

1
多项式朴素贝叶斯/支持向量机(SVM)都适用于您。 - Divyang Shah
“text classification example” 的链接是 404。 - Alex Plugaru
感谢您的报告,我已经修复了这个损坏的链接。 - ogrisel
@ogrisel:我正在尝试使用朴素贝叶斯处理10个类别的数据,但结果并不令人满意。如果数据集较小,每个类别大约有100个句子,那么SVM是一个很好的选择。 - user123
1
对于小样本数量(例如少于10000个样本左右),SVC(kernel='linear') 可能足够快地收敛。然而,它应该给出与 LinearSVC 相似的预测性能,并且与 LogisticRegression 可比较的性能(两者都应该更快并且可以扩展到数十万个样本)。对于每种情况,您需要通过交叉验证选择最佳的C值。此外,默认情况下 LogisticRegression 提供良好的概率估计(使用 predict_proba 方法)。这就是为什么我建议您默认使用线性模型而不是通用的 SVC - ogrisel
对于少于几千个样本的问题(由于其求解器的超二次时间复杂度),SVC仅在具有非线性可分数据且kernel='rbf'时才真正有趣。文本分类问题往往几乎是线性可分的,特别是如果您使用双字母特征。因此,LinearSVC和LogisticRegression倾向于是这类问题的更好选择。 - ogrisel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接