1.算法概述

 目前,对于文本分类的研究已经取得了巨大的进展,常用的文本分类算法有最近邻算法(KNN),支持向量机,人工神经网络,boosting,随机森林等。而KNN算法既是最简单的机器学习算法之一,也是基于实例的学习方法中最基本的,又是最好的文本分类算法之一。

基于实例的学习方法:

1.只是简单地把训练样例存储起来。等到输入一个新的查询实例时,才分析这个新实例和之前存储的实例之间的关系。**该算法几乎所有的计算都发生在分类时,**而且计算时一般考虑实例的所有属性。

2.基于实例的方法可以为不同的待分类查询实例建立不同的目标函数逼近。

 下面通过一个简单的例子说明一下:如下图,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。

最近邻算法(KNN)
可见KNN算法的结果很大程度取决于K的选择。在KNN中,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,在这里距离一般使用欧氏距离或曼哈顿距离。

2.算法流程

接下来对KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,其算法的描述为:

1)计算测试数据与各个训练数据之间的距离;

2)按照距离的递增关系进行排序;

3)选取距离最小的K个点;

4)确定前K个点所在类别的出现频率;

5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

3.算法分析

一. 优点

1.简单,易于理解,易于实现,无需参数估计,无需训练;

2.精度高,对异常值不敏感(个别噪音数据对结果的影响不是很大);

3.适合对稀有事件进行分类;

4.特别适合于多分类问题(multi-modal,对象具有多个类别标签),KNN要比SVM表现要好.

二. 缺点

1.对测试样本分类时的计算量大,空间开销大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本;

2.可解释性差,无法给出决策树那样的规则;

3.样本数量对新实例分类的影响,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数,导致分类出现偏差。

4.实例间的距离是根据实例的所有属性(也就是包含实例的欧氏空间的所有坐标轴)计算的。对于计算仅由个别属性决定的实例会产生维度灾难

  1. 懒惰学习。

4.算法改进

相关文章: