前言
k-近邻学习(kNN)是一种监督学习的方法。它采用测量不同特征值之间的距离方法(如欧式距离)来进行分类。它也是懒惰学习(lazy learning)的著名代表,即它不在训练阶段学习,而是在测试阶段计算后连同给出分类结果。
算法原理
我们都知道,kNN 的训练样本都是有分类标签的。那么,当给定一个测试样本时,我们可以根据某种衡量距离的计算方法来比较测试样本对应的特征向量与每个训练样本对应的特征向量之间的距离。但是,一般我们只取 k 个 与测试样本距离最近的训练样本来比较(一般 k 是不大于20的整数)。
在分类问题中,测试样本的分类结果取决于这 k个训练样本中出现最多的那个标签。而在回归问题中,测试的分类结果可取决于这 k 个训练样本的标签值的平均值。另外,还可以根据距离的远近进行加权平均或加权投票。
算法名称中 k 表示我们只选取与测试样本最相似的 k 个训练样本。
接下来,我以 kNN 分类器为例,利用 python 实现其算法思想。
python实现
首先,若选择欧式距离衡量两个向量点xA和xB之间的距离,则其公式如下:
接下来,定义函数 classify0()
传入相应参数即可完成 kNN 分类。
参考
- <<机器学习>>周志华
- <<机器学习实战>>