统计学习方法阅读笔记:k近邻法

来源:互联网 发布:数据库服务器默认地址 编辑:程序博客网 时间:2024/05/17 22:21

  k近邻法由Cover和Hart在1968年提出,是一种基本的分类与回归方法。k近邻法的输入是实例的特征向量,对应于特征空间中的点,输出为实例的类别,可取多值(此前介绍的感知机模型只是线性二类分类模型)。k-nearest neighbours(kNN)的基本思想是:在训练集中寻找k个与新的输入实例最接近的实例,构成一个k邻域,并将测试实例归于这个集合中占最大优势的类别。k近邻法中的几个关键要素是:1)一个带类别标注的训练集 2)距离度量方法 3)k值的选择 4)分类决策规则。在极端情形,如k=1时,kNN算法把输入实例的类别等同于距离其最近的训练实例类别;而当k=N时,无论输入的实例是什么,都简单地预测它属于在训练实例中最多的类。

  从更广泛的意义上说,kNN是一种基于实例的学习(instance-based learning)。它是一种典型的懒惰学习方法(a lazy learning technique),意思是,直到有新的输入实例(new query)到达时才从训练集中进行泛化,否则它什么也不做,不像感知机那样有明显的学习过程(model-building process)。


kNN算法:

  给定一个训练集D,输入实例的特征向量z,算法计算z到所有训练实例的距离从而得出距z最近的k个实例,然后预测输入实例的类别为k邻域中出现次数最多的类别。

算法的空间复杂度为O(n),这里n是训练实例的个数;时间复杂度也是O(n),因为会依次计算输入实例到每个训练实例的距离。


  以二维特征空间为例,一个实例点和距它较近的一些训练实例点构成一个单元(cell),全部cell的集合构成对特征空间的一个划分,同属于一个单元的训练实例属于同样的类别。


  选择何种距离度量的方法直接决定了算法是如何判断两个实例之间的相似性的。对于特征空间是n维欧式空间的情形,可以选择欧几里得范数作为距离测度,即范数。


上式最后一个等式成立是基于这样一个事实:


影响kNN算法性能的主要因素有如下几点:

  第一个就是k值的选择,以下图为例进行说明,输入实例是x,而训练集中的实例分属两类,分别以’+’,’-’表示。如果k值设定的太小,学习的近似误差会减小,只有与输入实例较接近的训练实例才会对预测结果起作用,缺点是学习的估计误差会增大,那么预测结果对训练集中的噪音会非常敏感, 也就是说,k值过小意味着整体模型变得复杂,容易发生过拟合(overfitting)。如果将k值设定的过大,那么近邻域中会包含很多距离x很远且属于其他类别的实例。在小规模训练集情形下,需要指出k=1是一个较好的选择,而当有充足的训练数据,我们可以使用更大的k值,这样做也可以减少噪音的干扰。



  第二个问题是分类决策规则,也就是说采用何种策略从k邻域中的实例类别来推测输入实例x的类别。最intuitive的方法是进行投票表决,这看起来相当公平,但有一个比较明显的弱点:没有考虑相对距离的信息,也就是说和输入实例x更近的实例比那些相对远的实例有更大的“发言权”。所以有时会根据相对距离而设定一个投票的权重,比如我们可以令那些距离x较近的实例有更大的投票权重:,这样一来kNN算法就要做一些修改来体现权重的作用:

  这里还有一个不容忽视的问题,基于距离的度量可能会受到高维特征的影响:比如,欧几里得测度在特征向量维度增加时,区分不同特征的能力就会下降。同时,我们还要考虑feature scaling的问题:考虑一个训练集,训练实例包含如下几个特征:人的身高(1.5~1.8m),体重(50~100kg),以及年收入(50000~300000元)。这几个特征在数量级上差别很大,如果不进行归一化,年收入这一特征就会大大削弱其他两个特征的作用能力,从而使得预测具有明显的bias。