K近邻算法详解
近朱者赤,近墨者黑。
- KNN简介
- KNN原理
- KNN的优缺点
- KNN的性能问题
- kd树
KNN简介
K最近邻(k-Nearest Neighbor,KNN),是一种常用于分类的算法,是有成熟理论支撑的、较为简单的经典机器学习算法之一。该方法的基本思路是:如果一个待分类样本在特征空间中的k个最相似(即特征空间中K近邻)的样本中的大多数属于某一个类别,则该样本也属于这个类别,即近朱者赤,近墨者黑。显然,对当前待分类样本的分类,需要大量已知分类的样本的支持,因此KNN是一种有监督学习算法。
KNN原理
先举一个简单的例子:
上图中,所有样本可以使用一个二维向量表征。图中,蓝色方形样本和红色三角形样本为已知分类样本。若使用KNN对图中绿色圆形未知分类样本进行分类,当K=3时,其三近邻中有2个红色三角形样本和1个蓝色方形样本,因此预测该待分类样本为红色三角形样本;当K=5时,其三近邻中有3个红色三角形样本和2个蓝色方形样本,因此预测该待分类样本为蓝色方形样本;
综上,KNN算法有以下几个要素:
- 数据集
- 样本的向量表示
- 样本间距离的计算方法
- K值的选取
数据集:即必须存在一个样本数据集,也称作训练集,样本数据集中每个样本是有标签的,即我们知道样本数据集中每一个样本的分类。当获取到一个没有标签的待分类样本时,将待分类样本与样本数据集中的每一个样本进行比较,找到与当前样本最为相近的K个样本,并获取这K歌样本的标签,最后,选择这k个样本标签中中出现次数最多的分类,作为待分类样本的分类。因此,K近邻算法可行的基础是,存在数据集,并且是有标签数据集!
样本的向量表示:即不管是当前已知的样本数据集,还是将来可能出现的待分类样本,都必须可以用向量的形式加以表征。样本的向量表现形式,构筑了问题的解空间,即囊括了样本所有可能出现的情况。向量的每一个维度,刻画样本的一个特征,必须是量化的,可比较的。
样本间距离的计算方法:既然要找到待分类样本在当前样本数据集中与自己距离最近的K个邻居,必然就要确定样本间的距离计算方法。样本间距离的计算方法的构建,与样本的向量表示方法有关,当建立样本的向量表示方法时,必须考虑其是否便于样本