如何使用 SVM 和 KNN 对文本文档进行分类

Posted

技术标签:

【中文标题】如何使用 SVM 和 KNN 对文本文档进行分类【英文标题】:How can i classify text documents with using SVM and KNN 【发布时间】:2013-05-17 15:24:17 【问题描述】:

几乎所有的例子都是基于数字的。在文本文档中,我有单词而不是数字。

那么你能告诉我如何使用这些算法进行文本文档分类的简单示例吗?

我不需要代码示例,只需要逻辑

伪代码会有很大帮助

【问题讨论】:

只是一个简单的问题。当您的意思是大多数示例都基于数字时,您指的是元素(在您的情况下是文档)表示为诸如 (1, 0.77, 0.4, ...) 之类的向量,对吗? 【参考方案1】:

常见的方法是使用词袋模型 (http://en.wikipedia.org/wiki/Bag_of_words_model),分类器将学习文本中单词的存在,它很简单,但效果却出奇的好。

另外,这里有一个类似的问题:Prepare data for text classification using Scikit Learn SVM

【讨论】:

我想这可能效率很低,因为可能有几十万个单词我不正确吗? @MonsterMMORPG 不一定,因为并非所有词都具有相同的相关性,您可能希望忽略短词(少于三个字符),可能会忽略非常长(> 10)和频率较低的词。此外,一个 400 - 600 个单词的向量应该没问题,并为您提供不错的性能 @Pedrom 所描述的称为特征选择,您可以在其中选择最具代表性的术语。他解释的具体方法是基于文档频率的特征选择,这是一种非常简单(尽管非常强大)的方法,可以限制您处理的信息,以提高效率,在某些情况下,还可以提高有效性(质量)。但是,我不同意提到功能的数量。这在很大程度上取决于集合,但我会说您需要 1000 到 3000 个功能才能获得最佳性能,我建议您尝试几种配置。 This 是一篇非常好的论文,比较和解释了文本分类的不同特征选择指标。您还可以查看Sebastiani's 文本分类调查,了解有关一般分类的扩展信息,特别是特征选择。 @miguelmalvarez 很好的评论 Miguel,我非常同意你所说的,我只是想给出一个关于功能数量的下限,这取决于你可能需要的问题的要求和领域这么多功能。【参考方案2】:

您将出现在文档中的术语表示为向量中的权重,其中每个索引位置都是术语的“权重”。例如,如果我们假设一个文档“hello world”,我们将位置 0 与“hello”的重要性相关联,将位置 1 与 world 的重要性相关联,并且我们将重要性衡量为该术语出现的次数,该文档被视为 d = (1, 1)。

同时,只说“你好”的文档将是 (1, 0)。

这种表示可以作为衡量文档中术语重要性的任何度量的基础,因为术语频率(如@Pedrom 所建议的)是最简单的选项。最常见但又足够简单的技术是应用 TF-IDF,它结合了术语在文档中的常见程度和在集合中的罕见程度。

希望对你有帮助,

【讨论】:

【参考方案3】:

在词袋模型中,您可以使用词频并根据它们在新文档和训练文档中的出现情况为其分配权重。之后,您可以使用相似度函数计算训练和测试文档之间的相似度。

【讨论】:

以上是关于如何使用 SVM 和 KNN 对文本文档进行分类的主要内容,如果未能解决你的问题,请参考以下文章

使用学习对文本文档进行排名?

在 Python 中使用 h2o4gpu K-Means 对文本文档进行聚类

MATLAB中如何使用KNN对数据进行分类?

如何对法律领域的文本文档进行分类

如何在 scikit-learn 中继续训练 svm 和 knn?

12 - SVM, KNN,LR, RF简要介绍