KNN算法:K最近邻分类算法(K-NearestNeighbor

2020-03-28  本文已影响0人  遇事不决_可问春风_

一、KNN算法概述

最近邻算法,或者说K最近邻(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻居来代表。KNN是一种分类(classification)算法,它输入基于实例的学习(instance-based learning),属于懒惰学习(lazy learning);即KNN没有显式的学习过程,也就是说没有训练阶段,没有要学习的参数,直接进行推理 / 测试。数据集事先已有了特征值和分类标签,待收到新样本后直接进行处理。与急切学习(eager learning)相对应。

KNN是通过计算不同样本的距离进行分类的 , 其思路是:

如果一个样本在特征空间中的K个最邻近的样本中的大多数属于某一个类别,则该样本也划分为这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
  提到KNN,网上最常见的就是下面这个图,可以帮助大家理解。
  我们要确定绿点属于哪个颜色(红色或者蓝色),要做的就是选出距离目标点距离最近的K个点,看这K个点的大多数颜色是什么颜色。当K取3的时候,我们可以看出距离最近的三个,分别是红色、红色、蓝色,因此得到目标点为红色。


算法的描述:

1)计算测试数据与各个训练数据之间的距离;
2)按照距离的递增关系进行排序;
3)选取距离最小的K个点;
4)确定前K个点所在类别的出现频率;
5)返回前K个点中出现频率最高的类别作为测试数据的预测分类

二、关于K的取值

K:临近数,即在预测目标点时取几个临近的点来预测。
K值得选取非常重要,因为:
(1)如果当K的取值过小时,一旦有噪声得成分存在们将会对预测产生比较大影响,例如取K值为1时,一旦最近的一个点是噪声,那么就会出现偏差,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
(2)如果K的值取的过大时,就相当于用较大邻域中的训练实例进行预测,学习的近似误差会增大。这时与输入目标点较远实例也会对预测起作用,使预测发生错误。K值的增大就意味着整体的模型变得简单;
(3)如果K==N的时候,那么就是取全部的实例,即为取实例中某分类下最多的点,就对预测没有什么实际的意义了;
  K的取值尽量要取奇数,以保证在计算结果最后会产生一个较多的类别,如果取偶数可能会产生相等的情况,不利于预测。

K的取法:

常用的方法是从k=1开始,使用验证集估计分类器的误差率。重复该过程,每次K增值1,允许增加一个近邻。选取产生最小误差率的K。一般k的取值不超过20,上限是n的开方,随着数据集的增大,K的值也要增大。
注:从验证集中学习超参数K

三、关于距离的选取

① Euclidean Distance(欧几里得距离)L2
② Manhattan distance(曼哈顿距离) L1

四、总结

上一篇下一篇

猜你喜欢

热点阅读