k近邻法_统计学习方法_学习笔记

  • 前言

k近邻法(k-nearest neighbor,k-NN)是一种较为简单的、基本的分类与回归算法。接下来只讨论k-NN在分类问题中的应用,应该注意的是k-NN并没有显示的学习过程。除了介绍k-NN模型的思想,也将kd树的内容纳入到此章内容之中。


目录

1 k-NN模型

1.1 距离判断规则

1.2 k值的选取

1.3 分类决策规则

2 kd树

2.1 kd树的构建

2.2 kd树的查询

3 小结


1 k-NN模型

k-NN的思想较为直观:要处理的问题为多类别分类问题。假设给定一组输入的训练数据集S,当有一个新的数据点x需要进行分类时,首先找到S中距离x最近的k个样本点,根据分类规则(通常是多数表决的形式),由k个样本点决定x的类别。也就是说,假设最近邻的k个样本点中类别c出现的次数最多,那么x的类别即为c。多数表决判别方式如下公式所示:

从上述可以发现,k-NN并没有显示的学习过程,分类的判别由最近邻的k个样本所决定。因此,如何选取最近的k个样本,如何确定k的值,如何根据这k个样本判别x的归属类别,这三个要素即为k-NN算法的核心。

1.1 距离判断规则

 不同的距离判断规则会造成不同的样本点选择的结果。一般选取欧式距离作为距离判断的依据,当然也可以选取更一般化的 L_{p}距离。设样本的特征空间为n维实数空间,那么L_{p}距离的定义(p\geq 1):

统计学习方法的符号表示与之前的有一些出入。这里x_{i}^{(l)}代表的是第 i 个样本的第 l 维特征。

当 p = 1 时,即为曼哈顿距离(Manhanttan Distance):

当 p = 2 时,即为欧式距离(Euclidean Distance):

当p趋近于无穷时,即代表差异最大的那一维特征的距离:

1.2 k值的选取

不仅距离判别规则的不同会造成不同的样本选择,从而对结果造成影响;k值的选择也是对于结果产生重要影响的一个因素。

当k值选取过小时,也就是采用距离待分类数据 x 的最近的几个样本进行估计,这样的优势在于对于 x 的拟合结果会更好(近似误差减小),而劣势也恰恰在于对于 x 拟合得过好了,因此存在着过拟合的风险(估计误差增大)。不仅如此,若当选取的样本为噪声点时,还会使预测效果变差,甚至出错。(k=1,最近邻)

当k值选取过大时,也就是采用距离待分类数据 x 的最近的较多个样本进行估计,这样的优势在于减少了过拟合的风险(估计误差减小),而劣势在于可能使得一些与 x 并没有关系的样本也对于预测起了作用(近似误差增大),也就是增加了欠拟合的风险,同样也会使预测出错。(k=N,全部样本点参与判断)

原文采取近似误差和估计误差的方式进行阐述。近似误差可以理解为选取的k个样本对于x的拟合程度;而估计误差可以理解为估计的结果与真实结果的偏离程度。因此k的选择对于结果产生重要的影响,在应用中,k值一般选择一个比较小的数值(因为首先得保证模型不欠拟合,再来防止过拟合),通常采用交叉验证法选择最优的k值。

1.3 分类决策规则

通常采用的多数表决规则(Majority Voting Rule)即是等价于经验风险最小化。因为选取k个样本中,包含样本最多的一类作为判别规则,也就是要求分类错误的概率最小,即是经验风险最小化。由下列误分类率表示式可以知道,要使误分类率最小即经验风险最小,就要使  \sum _{x_{i}\in N_{k}(x)}I(y_{i}=c_{i}) 最大。因此多数表决规则等价于经验风险最小化。


2 kd树

2.1 kd树的构建

当决定了第一节模型的三个要素:距离判别规则、k值的选取、分类判别规则之后,就可以利用k-NN算法进行分类判定了。但是除此之外,还有一个关键地方在于如何建立好一个数据结构从而高效寻找到距离待分类样本x最近的k个样本。常常利用kd树作为查询的依据。

kd树(kd树的k指的是k维数据,注意与k-NN的不同)是一种对于k维数据进行存储与快速检索的树形数据结构。kd树是一个二叉树。每次选择某一维数据进行构建,构建kd树相当于不断地用垂直于某一维度坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。

给出输入数据集T,构建kd树步骤如下:

(1)构建根节点,根节点开看做包含T的k维空间的超矩形区域。

选择第一个维度x^{(1)} 进行分割。以S中所有的数据作为切分对象,以T中所有数据的第一个维度 x^{(1)} 的中位数作为切分点(注意这里的中位数并不是指严格的中位数,即当划分的数据为偶数个时,选择中间值左边或者右边一个都可以,而不是选择中间两个的值的平均作为中位数),将空间进行二分。小于中位数的样本落入左节点待分割区域,反之落入右节点待分割区域。而根节点存储的是落入空间切分超平面上的样本点。

(2)重复上述步骤,依次选择相应的维度x^{(j)} 作为切分的标定构建kd树。将落在切分超平面上的样本点保存在该节点。

(3)直到分割的子区域中不存在待分割的样本时,停止分割,完成kd树的构建。

在选择空间某一个维度进行划分时,有一个优化方案便是,可以先按照每个维度的方差进行由大到小的排序,依次选择方差大的维度进行分割,因为维度的方差越大,代表其越可分,分割的效果也就越好。

接下来给一个例子,进行kd树的构建。

假设一个二维空间数据集T如下所示:

 第一步:以x^{(1)}维度进行划分,中位数为7,构建根节点。根节点存储样本(4,7),得到第一层。

第二步:以x^{(2)}维度进行划分,左区域中位数为4,右区域中位数为6。因此第二层左节点存储(5,4),右节点存储(9,6)。

如此递归,最后得到的空间划分区域如下所示(红色数字代表kd树的层):

得到kd树存储数据如下所示:

2.2 kd树的查询

由上述构建的kd树是一颗平衡的二叉树,应该注意的是平衡的二叉树不一定是查询效率最高的树。

根据上述2.1中已构造的kd树,假设查询数据x,kd树查询的步骤如下所示,这里以最近邻查询为例,k近邻查询近似。

(1)在kd树中找出与x最近的叶子节点,假设为a,并将此叶节点作为待定的最近邻点m(即m=a)。与x最近的叶节点不一定是最近邻点。若存在着比m更近邻点,那么一定是位于以x为圆心,以x到m的距离为半径的超球体之中。

(2)由a不断向前回退,检查节点分割的另一区域是否与超球体相交,若相交,则检查该节点保存的样本是否比m更近,若更近,则更新m,更新超球体。

(3)不断回退直到根节点,得到最邻近点m。

由kd树查询的步骤可知,超球体与超区域是否相交的判断实际上是整个查询计算的瓶颈,会花费很多时间。而且,kd树适用于样本数量m远大于特征维度n的情况,若样本数量与特征维度相差不是很大,那么kd树的查询则近似于线性查询(复杂度O(m))。

以下图进行kd树最近邻查询的举例,查询数据为S,正确的输出的结果为E。红色数字仍然代表构造的kd树的层数。

(1)首先根据输入S,查询到距离S最近的叶节点D。并将D记为待定最近邻点。并以S为圆心,SD的距离为半径绘制判定面圆B。

(2)由D向前回退到其父节点B,判断B的另一个节点F代表的空间区域不与面B相交。继续向前回退到B的父亲节点A,在A的另一节点C代表的空间区域与面B相交,以此求GS、ES距离,判定ES距离小于DS,因此将E即为待定最近邻点,更新面B。

(3)A为根节点无法回退,因此E为输入S的最近邻点。输出S。


3 小结

本章主要是对于k近邻算法进行了介绍,重点在于对于k近邻中k取值对于结果的影响的理解上。理解k的取值所带来的过拟合以及欠拟合的风险。除了k近邻算法,也将kd树做了一个简单的介绍。重点在于理解kd树的构建以及查询。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值