介绍
K近邻算法又叫KNN(K Nearest Neighbor)算法,这个算法是机器学习里面一个比较经典的算法,其中的K表示最接近自己的K个数据样本。
KNN和K-Means算法的区别
- K-Means算法用来聚类,用来判断哪些样本是一个比较相近的类型,属于非监督算法。
- KNN算法是用来做分类的。也就是说,有一个数据集里的样本的label已经确定了,然后,给定一个待分类的数据x,通过计算与它最近的K个样本来判断这个待分类数据属于哪个分类,类别c占的个数最多,就把x的label设为c。显而易见KNN属于监督算法。
Wikipedia上的KNN词条中有一个比较经典的图如下:
从上图中我们可以看到,图中的有两个类型的样本数据,一类是蓝色的正方形,另一类是红色的三角形。而那个绿色的圆形是我们待分类的数据。
- 如果K=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形。
- 如果K=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形。
优点&缺点
在KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决 策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方 法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
KNN算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量 很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。因此可以采取基于权重的方法(和该样本距离小的邻居权重大,距离远的权重小)来改进。
总结
KNN算法对初值比较敏感,一般需要跟其它的高级分类算法结合使用,效果会比较理想。