近邻法

1 最近邻(NN)
最近邻的思想:计算测试样本到所有已知样本之间的距离,将最近邻者的类别作为测试样本的类别标签。
然而,最近邻的决策存在很大的风险。如下图所示,矩形表示待测样本,如果按照最近邻的决策,待测样本矩形应该与三角新是一类,可是,如果将离矩形最近的那个三角形去掉呢,那么圆形就是矩形的类别,所以,这种决策对已知样本的数据集太过敏感。
这里写图片描述
2 K近邻(KNN)
(1)思想
KNN是最近邻的一个明显的推广。它的思想是:对于一个新样本点,计算该点到所有已知类别点的距离,选取距离最少的前K个已知样本点,将这K个已知样本点出现频率最高的类别当做该新样本点的类别。
(2)三要素
根据KNN得思想可以知道,KNN具有三要素:①K值的选择 ②距离度量 ③分类决策规则。下面我们分别讲解:①K值的选择:K值的选择对KNN的影响很大,K值过小,就相当于在较小的邻域范围对待测样本进行预测,如果邻近的那几个样本点正好是噪声点,那就呵呵了,所以这样的结果就是学习的误差会很大,比如一种极端情况是当K=1,就是最近邻了;然而,当K值过大,就相当于在较大的邻域范围对待测样本进行预测,这样确实可以减少学习的估计误差,可是同时意味着整体模型过于简单,容易忽略已知样本中的大量有用信。在实际应用中,K值一般取一个比较小的数,通常采用交叉验证法来选取最优K值。
②距离度量:特征空间中两个实例的距离是两个实例点相似程度的反应。这里的距离度量一般是欧式距离,也可以是其他距离。
③分类决策规则:多数表决规则,即取前K个样本中,出现次数最多的类别当做待测样本点的预测类别。
如上图所示,如果K=6,则矩形与圆形属于一类。显然,这种近邻对已知样本点的容错性增强了。然而,在计算量上,仍需要计算所有待测样本点到所有已知样本点的距离,计算复杂度仍然很高,所以如何能快速搜索到K近邻就很重要了,下面的kd树就能帮助实现。
(3)k近邻的实现: kd树
1) kd树是一种对k维空间中实例点进行一种平衡二叉树存储的数据结构,便于方便的快速检索。
2)构造平衡kd树:
算法:输入:n个k维空间数据集这里写图片描述,其中这里写图片描述
输出:kd树
1 开始:用一个能包含所有数据集的k维空间的超矩形区域为根节点。
2 首先,选取这里写图片描述为坐标轴,对数据集的第一维数据进行排序,选择第一维数据集中中位数作为切分点,垂直坐标轴这里写图片描述切分,将整个区域切分成左右两个区域。
3 重复:在左边剩下的数据集中,对所有左边的数据集按第二维数据集排序,选择第二维中位数作为切分点,垂直坐标轴这里写图片描述切分,将整个左边区域切分成上,下两部分;右边与左边的操作一样。重复操作,如果选取这里写图片描述为坐标轴,就选第n维数据集中位数为切分点,垂直坐标轴这里写图片描述切分,一直这样循环切分,直到两个切分的区域没有实例存在就停止。
举例:给定一个二维空间的数据集:这里写图片描述,构造平衡kd树。
步骤:(1)先构造一个能包含所有数据集T的矩形。
这里写图片描述
(2)选为这里写图片描述坐标轴,然后选第一维数据集中位数为切分点,垂直坐标轴作分割线。数据集中所有第一维数据排好序分别为{2,4,5,7,8,9},所以中位数为7,作好分割线后。将整个矩形分成左右两个子区域,左边的子集有{(2,3),(5,4),(4,7)},右边的子集有{(8,1),(9,6)}
这里写图片描述
(3)选取这里写图片描述为坐标轴,然后选第二维数据集中位数为切分点,垂直坐标轴作分割线。左右两边作同样的操作。
这里写图片描述
(4)分割完之后,整个矩形分成4个小区域,然后再对每个区域进行划分,这样就划分完整个数据集的特征空间。
这里写图片描述
(5)kd树也是按照这个流程建立。
这里写图片描述
3)搜索kd树
算法:输入:已构造的kd树,目标点x
输出:x的最近邻
1 开始:找x最近邻的叶子节点。从根节点出发,递归地向下访问kd树。若目标点x当前维的坐标小于切分点坐标,则左移到左边节点,否则右移到右边节点,直到移到叶子结点,那此叶子节点便是当前最近叶子点。
2找x的最近邻:递归向上回退,对每个退到的节点有:
A:如果该节点到x的距离比最近叶子节点到x的距离小,则将该节点设为“当前最近点”。
B:以目标点x为球心,以目标点与“当前最近点”之间的距离为半径作球面,看超球体是否与该节点一个子节点对应的区域切分面相交,如果相交,可能在另一个节点对应的区域内存在距目标点更近的点,移动到另一个子节点,递归的进行最近邻搜索。如果不相交,向上退回。
C:退回到根节点时,搜索结束。最后的“当前最近点”即为x的最近邻。

举例:比如,在上面数据集中,寻找目标点(2.1,3.1)的最近邻。
(1)首先从根节点出发,比较数据集第一维数据。因为2.1>7,所以目标点进入到(7,2)左边区域,到达左边的切分点(5,4)。
(2)再比较(5,4)第二维数据4与目标点第二维数据3.1,因为3.1>4,所以目标点进入(5,4)划分的下边区域,到达(2,3)。现在就遍历到了叶子节点,结束向下遍历。此时将该叶子节点视为“当前最近点”。
(3)计算目标点到“当前最近点”的距离,假设为d,以目标点为圆心,以d为半径画圆,看与“当前最近点”另一子节点区域是否相交,在这也就是看是否与y=4那条线相交,如果不相交,那么目标点的最近邻就是找到的“当前最近点”,如果相交,还得递归向上回退,进行最近邻搜索。
这里写图片描述

参考文献:《统计学习方法》 李航

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值