基于SVM分类器的文本挖掘

时间:2013-10-21 00:24:15

标签: python svm text-mining

我想使用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应用相同的方法会很有趣。期待您的建议或示例代码。

1 个答案:

答案 0 :(得分: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-cross验证(sklearn.cross_validation)来估计SVM的性能。如果您的注释文本数量有限,建议使用n-cross验证,因为它会利用您拥有的所有数据
  5. 以下sklearn文档是在sklearn框架中执行文本分类的一个非常好的示例,我建议将其作为起点:

    Classification of text documents using sparse features