机器学习算法系列(1):K近邻
一.K近邻算法思想
K近邻(KNN)学习是一种常用的监督学习方法,其工作机制非常简单:给定测试样本,基于某种距离度量找出训练集中与该测试样本最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。
如上图所示,红蓝色分别是给定的样本集中的不同类型的数据,同心圆线表示基于某种恰当的距离度量测量出的等距离线,绿色圆圈表示等待分类的测试样本,KNN的任务就是要解决绿色数据点的分类问题。
“物以类聚,人以群分”,我们认为在空间上近邻的数据点在类型上也更加具有相似性,故我们可以通过该绿色点周围的带有标签的数据点(这就是为什么KNN是监督学习)来判断这个测试样本的类型。
- 若k=3,观看绿色点周围三个样本,则分别是两个红色三角形和一个蓝色正方形,基于投票的决策规则,判定绿色的这个待分类点属于红色的三角形一类。
- 若k =5,观看绿色点周围五个样本,则分别是两个红色三角形和三个蓝色正方形,同上思路,判定绿色的待分类点属于蓝色的正方形一类。
综上,最常用的KNN算法,就是给定一个训练数据集(后文会提到,实际上KNN算法不需要进行训练,是懒惰算法),对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,找到这k个实例中的多数类,把输入实例就划分为这个类。
-
输入:训练数据集T = (x1,y1),(x2,y2)…,(xn,yn),其中xi是表示实际数据点的d维特征向量,(xi1,xi2,…xid),yi是该数据点的类标号;待判定的新特征向量x(x1,…xd)。
-
输出:新数据向量所对应的类别y
-
步骤:
-
根据给定的距离度量,在训练集T中找出与x最近邻的k个点,涵盖这k个点的x的一个邻域(或者也可以成为一个集合)记作Nk(x);
-
在Nk(x)中根据分类决策规则(比如说多数表决机制)决定x 的类别y:
实际上找到最大类的做法可以根据实际编程实现进行变动,如果数据不大,可以暴力统计,或者借助哈希表、字典等数据结构和内部方法。
-
二.K近邻模型
1.模型的含义
KNN算法中,只要训练集T,距离度量方法,K值以及分类决策规则确定之后,对于任意一个输入的新实例点,它所属的类标都是唯一确定的。这相当于,KNN根据上述参数和要素把原本d维(每一个特征向量的维度)的特征空间划分成了一些含有类标的子空间,而我们要做的就是通过计算把新的实例点放到合适的子空间中,从而可以求得对应的类标号。
[
2.距离度量方法
距离和相似度可以反映出特征空间中两个实例点之间的相异度和相似度。K近邻算法中对应的特征空间一般是d维实数向量空间,较常使用欧氏距离。
- 闵可夫斯基距离:它是一组距离的定义
-
当p = 1时,即为曼哈顿距离(见后)
-
当p = 2时,即为欧式距离(见后)
-
当p→∞,切比雪夫距离
上述极限式时切比雪夫距离的定义式,实际计算使用时,只需要记住切比雪夫距离就是各个坐标距离的最大值:
- 曼哈顿距离:也即L1距离或城市区块距离,也就是欧几里得空间中的固定直角坐标系上两点所形成的的线段在每个轴上投影之和
在如图二维支教坐标系统,图上黑色线段两个端点之间的曼哈顿距离就是两个绿色方框的距离之和,其中红线和蓝线分别表示在不同轴上的投影。
说明 : 顾名思义,城市区块距离,也就是在曼哈顿这个城市中从一个式子路口开车到另一个十字路口,驾驶距离不可能是两点之间的直线距离,因为有大楼的阻挡。而实际的驾驶距离就是这里所谈论的曼哈顿距离。
- 欧氏距离
标准欧式距离: 在一些分类和聚类问题上使用一般的欧式距离无法处理非圆形分布的数据,试想长方形的数据分布,其长宽成一定比例,但是如果按照一般欧式距离计算,长与宽的数值可能会相差巨大。因此,在计算欧式距离之前先对样本集进行标准化消除比例因子带来的干扰。
3.K值的选择
特别地,如果K=N(训练集T中的样本数目)的话,不论输入的实例是什么,输出的都将是训练集中的多数类所对应的类标,此时相当于该模型不具有分类能力,忽略了训练集中的大量有用信息
在实际应用中,k一般去一个较小的奇数,采用交叉验证法来选取最优的k值
4.分类决策规则
-
投票法:选择这k个样本中出现最多的类别标记作为预测结果
-
平均法:在回归问题中多使用(KNN不止可用于分类问题),将这k个样本的实值输出标记的平均值作为预测结果
-
加权法:基于距离的远近进行加权均值求解或者加权投票,距离越近的样本权值越大。
三.K近邻的评价
1.优点
-
简单,易于理解,易于实现,不需训练
-
适合对一些稀有事件进行分类
-
适合多分类问题
2.缺点
-
是懒惰算法,对测试样本分类时计算量较大,内存开销大,评分慢
-
可解释性较差,这一点决策树做得更好
-
样本不平衡的时候,预测值会有偏差
懒惰算法与积极算法:
实践指路:实验楼免费课程KNN实现手写数字识别
https://www.shiyanlou.com/courses/777/learning/?id=2621
参考文档:
《统计学习方法》 李航 P37-40
《机器学习》 周志华 P225