KNN学习(K-Nearest Neighbor algorithm,K最邻近方法 )是一种统计分类器,对数据的特征变量的筛选尤其有效。
基本原理
KNN的基本思想是:输入没有标签(标注数据的类别),即没有经过分类的新数据,首先提取新数据的特征并与测试集中的每一个数据特征进行比较;然后从测试集中提取K个最邻近(最相似)的数据特征标签,统计这K个最邻近数据中出现次数最多的分类,将其作为新的数据类别。
KNN的这种基本思想有点类似于生活中的“物以类聚,人以群分”。
在KNN学习中,首先计算待分类数据特征与训练数据特征之间的距离并排序,取出距离最近的K个训练数据特征;然后根据这K个相近训练数据特征所属类别来判定新样本类别:如果它们都属于一类,那么新的样本也属于这个类;否则,对每个候选类别进行评分,按照某种规则确定新的样本的类别。笔者借用下面这个图来做更形象的解释:
如上图,图中最小的那个圆圈代表新的待分类数据,三角形和矩形分别代表已知的类型,现在需要判断圆圈属于菱形那一类还是矩形那一类。但是我该以什么样的依据来判断呢?
- 看离圆形最近(K=1)的那个类型是什么,由图可知,离圆形最近的是三角形,故将新数据判定为属于三角形这个类别。
- 看离圆形最近的3个数据(K=3)的类型是什么,由图可知离圆形最近的三个中间有两个是矩形,一个是三角形,故将新数据判定为属于矩形这个类别。
- 看离圆形最近的9个数据(K=9)的类型是什么,由图可知离圆形最近的9个数据中间,有五个是三角形,四个是矩形,故新数据判定为属于三角形这个类别。
上面所说的三种情况也可以说成是1-近邻方法、3-近邻方法、9-近邻方法。。。当然,K还可以取更大的值,当样本足够多,且样本类别的分布足够好的话,那么K值越大,划分的类别就越正确。而KNN中的K表示的就是划分数据时,所取相似样本的个数。
我们都知道,当K=1时,其抗干扰能力就较差,因为假如样本中出现了某种偶然的类别,那么新的数据很有可能被分错。为了增加分类的可靠性,可以考察待测数据的K个最近邻样本 ,统计这K个近邻样本中属于哪一类别的样本最多,就将样本X判属于该类。
当然,如果在样本有限的情况下,KNN算法的误判概率和距离的具体测度方法就有了直接关系。即用何种方式判定哪些数据与新数据近邻。不同的样本选择不同的距离测量函数,这能够提高分类的正确率。通常情况下,KNN可以采用Euclidean(欧几里得)、Manhattan(曼哈顿)、Mahalanobis(马氏距离)等距离用于计算。
- Euclidean距离为:
d(x⃗ ,y⃗ )=[∑i=1n(xi−yi)2]x⃗ =(x1,x2,...,xn)