文本分类的支持向量机

机器算法验证 机器学习 支持向量机 文本挖掘 libsvm 内核技巧
2022-04-06 18:11:04

我目前有一个数据集,第 1 类有大约 8000 个短文本文件,第 2 类有大约 3000 个短文本文件。我应用了 LibSVM 并在交叉验证实验中尝试了几个参数组合。

一般一级精度在(85%、90%)范围内;2 类精度在 (70% , 75%) 范围内;1 类和 2 类的召回率都在 (80% , 85%) 范围内。

出于文本分类的目的,我按照常用方法构建文本特征空间,对文档进行标记,过滤停用词并使用 tf-idf 或二进制频率构建词向量等。我还尝试了 n-gram 模型来构建特征空间. 但是这些方法并没有大大提高性能。我想知道是否有任何其他方法可以帮助调整 LibSVM 以提高性能。LibSVM 为参数设置提供网格搜索,但运行速度很慢。

4个回答

最近,LibSVM 对我来说并没有获得可靠的性能。你试过使用SVMLight吗?

您还可以尝试查看模型中哪些特征显示出最强大的预测能力,并添加某种丰富类型的特征。例如,如果我对文档是否包含与蛋白质-蛋白质相互作用相关的信息进行分类,我不会真正关心蛋白质的具体名称作为预测特征。我会预处理我的文档,并使用一些通常不会出现在我的文档中的常用术语来规范所有蛋白质提及,例如“THISWORDUSEDTOBEAPROTEIN”。以前的研究(对不起,除了我自己的论文Ambert & Cohen,2012 年,我想不出任何引文) 已经表明,这可以通过防止分类器被常见基因(例如,ADH1A)分散注意力并忽略稀有基因来提高分类器性能,而是将所有基因的预测能力组合成一个你可以认为是“基因提及”的特征”。

如果你还没有这样做,你通常可以通过词干来提高效率,正如我在这篇文章中解释的那样。

词干将用词干替换单词,因此例如“sky”和“skies”,或“hope”、“hopes”和“hoped”将被识别为相同。如果您的文本是英文的,那么您很可能最终会使用Porter 的词干算法,您可以在其中找到许多实现,其中最著名的是NLTK(在 Python 中)中包含的算法。上面提到的帖子包含一个代码片段,展示了如何使用它。

我在这篇文章中提出的另一个想法是使用协惯性分析 (CIA),这是一种被遗忘的规范分析变体,以减少数据的维度,同时保持与您的类的最大相关性。你最终只会得到两三个分数,而不是你的语料库中必须有的几百个分数,这可能会提供更好的偏差方差处理。

如果您还没有这样做的话,可以尝试一个简单的方法,即对每个文档向量进行归一化,使大小为 1。

如果每个训练向量的大小相似,SVM 往往会表现得更好。

您可以使用 Soundex 清理您的 tekst 文档,Soundex 是一种通过声音索引单词的语音算法。这种 Soundex 方法减少了拼写错误的数量。

SAS中有一个很好的soundex实现,即函数Soundex()