在学习李航的《统计学习方法》这本书时,遇到过不少困惑,在网上查文章向解决这些困惑,但有些东西比较模糊,或者是这里复制那里复制,而且千篇一律的是搜索最近邻,并且给的例子数据似乎都是相同的。至于搜索K个近邻,李航的《统计学习方法》也没有详细说明,网上也没看到的材料,所以决定写下这篇学习笔记,希望能给学习的人解惑,如果能解决你心中的困惑那说明这个笔记价值就有了,以下内容是对李航的《统计学习方法》中K近邻算法这一张的概括,同时也有一些自己的理解,及在实现算法过程中的问题,文末我GitHub的源码地址,你可以下载运行,算法实现K近邻,当K=1时为最近邻,结合李航的《统计学习方法》效果更好。
k-近邻法
k-近邻法(K-nearest neighbor,K-NN)是一种基本分类和回归方法,这里只介绍用于分类的k-最近邻法。k-近邻法的输入为实例的特征向量,输出为实例所属的类别,训练数据集可以包含多个类别的实例。k-近邻法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其k个最近邻(距离最近)中属于同一类个数最多的类别,将新的实例归属到该类别当中。k-近邻法没有一个显示的训练过程。
一、k-近邻法三要素
当训练数据集、距离的计算方法、k值及分类决策规则确定后,对任何一个新的输入实例,模型输出该实例所属的类别是唯一的。
1. k值的选择k值的选择会对k近邻法的结果产生重大的影响,k表示选取最近的k个近邻。
(1)k值较小
①近似误差小:只有与输入实例较近的训练实例才会对预测结果起作用。
②估计误差大:预测结果会对近邻的实例非常敏感,如果近邻的点恰巧是噪声 预测就会出错。
③模型复杂
④泛化能力差
(2)k值较大
①近似误差大
②估计误差小
③模型简单
④泛化能力较好
(3)k取样本容量N
①无论输入实例是什么,都将简单的将输入实例预测为训练实例中占最多的类 别的那一类。
②忽略了大量有用的信息。
在应用中,k值一般选取一个较小的,通常采用交叉验证法来选取最优k值。
2. 距离的计算方法
特征空间中两个实例的距离是两个实例点相似程度的反映,k近邻模型的特征向量一般是n维的,使用欧式距离,但也可以是其他距离,如更一般的Lp距离或Minkowski距离。
(1)欧式距离