3

我想使用 python nltk 将 SVM 分类应用于文本挖掘目的并获得精度,召回精度不同的测量信息。为此,我预处理数据集并将我的数据集拆分为两个文本文件,即 -pos_file.txt(正标签)和 neg_file .txt(负标签)。现在我想应用带有随机抽样的 SVM 分类器,70% 用于训练数据,30% 用于测试。我看到了一些 scikit-learn 的文档,但不确定我应该如何应用它?

pos_file.txt 和 neg_file.txt 都可以看作是词袋。有用的链接-

示例文件:pos_file.txt

stackoverflowerror restor default properti page string present
multiprocess invalid assert fetch process inform
folderlevel discoveri option page seen configur scope select project level

示例文件:neg_file.txt

class wizard give error enter class name alreadi exist
unabl make work linux
eclips crash
semant error highlight undeclar variabl doesnt work

此外,将相同的方法应用于 unigram、bigram 和 trigram 会很有趣。期待您的建议或示例代码。

4

1 回答 1

8

下面是一个非常粗略的将 SVM 应用于文本分类的指南:

  1. 将您的文本转换为向量表示,即将文本数字化,以便可以应用 SVM(和大多数其他机器学习器)。这可以使用 sklearn.feature_extraction.CountVectorizer/TfidfVectorizer 轻松完成,并且您可以在矢量化过程中自由选择 n-gram 范围以及所有其他选项,例如停用词消除和 word 文档频率阈值
  2. 执行特征选择,这通常是可选的,因为 SVM 可以很好地处理特征冗余。但是,特征选择可以帮助缩小学习空间维度并显着加快训练速度。常见的选择是:sklearn.feature_selection.chi2/SelectKBest,仅举几例
  3. 将 SVC 拟合(训练)到您的训练数据。您可以随意选择各种内核,对于 C 和 gamma 等学习器参数,您可以将它们保留为默认值,以供初始使用。如果您的目标是获得最佳性能,您可以使用网格搜索 (sklearn.grid_search),它会详尽地尝试您指定的参数组合,并向您显示产生最佳结果的组合。网格搜索通常在评估数据上进行
  4. 评估。在评估数据上微调学习器参数后,您可以在训练和微调阶段之前未见过的测试数据上测试拟合的 SVM 的性能。或者,您可以使用 n 交叉验证 (sklearn.cross_validation) 来估计 SVM 的性能。如果您的注释文本数量有限,建议使用 n 交叉验证,因为它利用了您拥有的所有数据

以下 sklearn 文档是在 sklearn 框架中执行文本分类的一个非常好的示例,我建议将其作为起点:

使用稀疏特征对文本文档进行分类

于 2013-10-22T00:46:31.520 回答