k近邻模型
基本思想
其本质思想是将特征空间划分成一个个的单元(

如上图所示:
考虑样本
- 对于
,其距离 比 近,因此, 无法成为 中的一员 - 对于
,其距离 比 近,因此, 无法成为 中的一员 - 对于
,其距离 均比 近,因此, 无法成为 的一员 - 对于
,其距离 均比 近,因此, 无法成为 的一员
因此, 组成的 为空,即
再考虑样本
- 对于
,由于没有任何一样比 距离 更近,因此 成为其一员 - 对于
,由于没有任何一样比 距离 更近,因此 成为其一员 - 对于
,其距离 均比 近,因此, 无法成为其一员 - 对于
,其距离 均比 近,因此, 无法成为其一员
因此,
同理我们可以得到
这样一来,有所有
上面只是理想中的方式,是一种辅助理解的办法,存在诸多问题,比如区域不好定义,上面的示例中我们只是规定了一个
在实际中,我们往往直接使用与每个样本
其中
曼哈顿距离(L1范数):
三种距离在二维空间中的等距图如下:

对于
kd树
从上面的介绍可知,若想找去每个样本的
平衡树的建立
假设样本为
示例:
有以下二维空间中的数据集,要求建立一个
首先让所有样本在
得到中位数
因此得到
继续构建下一层
对于
对于
至此,原始样本的对应的平衡
下面是图例:

树的查找
树的查找包括正向和反向两个过程,正向和建树类似只需一一判断即可,反向也是必须的,因为正向过程不能保证所查找到的一定是其最近邻(需要参见
- 正向递归查找。当给出一个样本在查找与它的最近邻样本时(限定
距离)时,需要依次从根节点往下查找,和建树过程类似,比如在建立第一层时用的是 即第一维值的大小,那么查找时也应使用样本的第一维与其第一维进行比较,该过程递归进行直至找到叶子结点。 - 反向回溯查找。在得到正向查找中与样本点
的近似最近邻点 时,以 为圆心, 到 的 距离为半径构建一个圆。回溯,依次各个区域是否与圆相交,若相交找到与其相交的最小区域对应的结点,
示例:
我们考虑比机器学习课本更复杂一些的情况,如下。

首先我们容易根据正向查到找到样本点 所处的区域即B的右子树对应的区域,也是叶结点 的范围。构建以 为圆心, 为半径的圆。然后检查 对应的区域是否与圆相交,显然不相交,于是F向上回溯至A的上半部分 对应的区域,显然与圆相交。于是检查C的左区域 对应的区域,无相交,检查 的右区域 是否相交,相交,更新半径为 ,并构建新圆,如下。

继续检查