机器学习 -- KNN(k-Nearest Neighbor)最邻近规则分类算法

1. 综述html

Cover和Hart在1968年提出了最初的邻近算法,也被称为基于实例的学习或懒惰算法。
与决策树算法相比,处理训练集的时候并不创建任何模型,进行分类时才将测试样例和全部已知实例进行比较进而分类。
2. 例子算法

上图中主要有蓝色方块和红色三角两种色块,若是要对绿色未知圆点进行判断分类,那么它是属于蓝色方块仍是红色三角呢?ide

算法的思路:若是一个样本在特征空间中的K个最类似(即特征空间中最邻近)的样本中的大多数属于这一类别,则该样本也属于这个类别。学习

KNN算法通常能够分为两步:测试

  1. 以全部已知的实例做为参考,计算未知圆点和全部色块的距离。
  2. 选择一个参数K,判断离未知实例最近的K个实例是什么类型,以少数服从多数的原则进行分类。

上图中,若是咱们选择的K值为1,则离未知圆点最近的一个色块是蓝色,未知实例会被归类为蓝色。假设咱们选择的K值为4,很明显距离未知圆点最近的4个色块分别为:3个红色三角和1个蓝色方块,那么未知圆点就会被归类为红色三角(少数服从多数)。ui

因此K的选择对结果的影响很大,在必定范围内经过增大K能够加强抗噪性。idea

对于距离的衡量方式有不少种,例如Euclidean Distance,余弦值(cos),相关度 (correlation),曼哈顿距离 (Manhattan distance),最经常使用的是Euclidean distance: spa

二维的下距离计算公式如上图简单的数学公式,扩展到n维下x,y两点的距离公式:.net

注解:设n维空间两点的坐标:
Px(x1,x2,...,xn)
Py(y1,y2,...,yn)
那么Px、Py两点间距离(平方):
(x1-y1)^2+(x2-y2)^2+.+(xn-yn)^2htm

KNN算法虽然从原理上也依赖于极限原理,但在类别决策时,只于极少许的相邻样本有关。因为KNN算法主要依靠周围有限的邻近样本,而不是依靠判别类域的方法来肯定所属类别,所以对于类域的交叉或重叠较多的待分样本集来讲,KNN算法较其余算法更为适合。

KNN算法不只能够用于分类,还能够用于回归。经过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就能够获得该样本的属性。

不足一:须要大量的空间存储全部实例,以及计算量较大。由于对每个未知实例都要计算它到全部实例的距离,才能求得它的K个最近邻点。

解决方法:目前经常使用的解决方法是事先对已知样本点进行剪辑,
事先去除对分类做用不大的样本。这个解决方法比较适用于那些样本容量比较大的类域,而样本容量比较小的类域采用这种算法比较容易产生误分。

不足二:当其中一类样本过大,则无论未知实例属于哪一类,都很容易归为数量过大的这一类。

如图:

 

由于Y点在红色区域内,用肉眼去看很容易判断出它多半属于红色一类,可是由于蓝色过多,若K值选取稍大则很容易将其归为蓝色一类。为了改进这一点,能够为每一个点的距离增长一个权重,这样离得近的点能够获得更大的权重,好比距离d,权重1/d。

参考:http://www.cnblogs.com/kuihua/p/5883691.html

参考:http://blog.csdn.net/ewfwewef/article/details/52798611

参考:http://blog.csdn.net/erzr_zhang/article/details/53506860

相关文章
相关标签/搜索