K近邻法(KNN)

来源:互联网 发布:windows repair怎么用 编辑:程序博客网 时间:2024/04/27 22:27

K近邻法(k-nearest neighbor,KNN)是一种基本分类与回归方法,它可以把高维的特征向量作为输入,并输出这些向量的类别。

分类

KNN算法的思路非常简单,给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例的多数属于某个类别(即多数表决规则),就把该输入实例分为这个类。KNN实际上就是利用训练数据集对特征向量空间进行划分,并将划分好的空间作为分类的依据。在KNN算法中,K值的选择,距离度量的方法以及分类决策的规则是要实现这个算法必须解决的三个问题。

在KNN中,距离的度量方式有多种,每种方式的含义也各不相同,如何选择合适的度量方式要结合数据本身的特点才行。K值的选择也会对分类结果产生重大影响,若k值过大,整体的模型就变得简单,距离远的点也会对预测结果产生影响,造成误差;若k值过小,就意味着整体的模型变得复杂,使得预测结果对近邻的点非常敏感,容易产生过拟合的结果。在实际应用中,我们一般给k的值设定一个范围,在这个范围内做交叉验证,去获得效果最好的k值。分类决策规则也有很多,但是数学上能证明多数表决规则等价于使经验风险最小化,是比较合理的方法之一。(不知道是不是有符合结构风险最小化的规则,有的话应该更好)

在Weke中,按照k=10,距离度量方法按欧式距离来决算,用多数表决规则的分类决策规则来处理iris.2D这个数据,得到的分类边界线如下:


可以看到红绿区域和绿蓝区域的交界处有中间地带的颜色,这是因为处于这些地带的点的k近邻中有属于不同类别的实例,处于分类器的边界线周围。在Weka中,KNN划分到惰性分类器中,称为IBK算法,这是因为KNN算法不对数据进行预先的处理,直到要分类时,才去计算,因此也叫惰性分类器。

回归

KNN的回归算法的思想也是基于分类的思想进行的拓展,它通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成正比。通过这样的方法得到的属性值就是KNN的回归。具体的例子下次有机会再介绍。

0 0