统计学习算法——K近邻法

内容来自B站Up主:风中摇曳的小萝卜https://www.bilibili.com/video/BV1vA4y1o72F,仅为个人学习所用。

问题导入

有这样一个分类问题,有两类节点,三个属于A类,两个属于B类。现在有一个新的点橙色点,那么它属于A类还是B类?
在这里插入图片描述

很自然的想到,若橙色点更靠近A类,则该点属于A类,反之属于B类。

如果我们有这样的策略:

  • 选择以该点最近的三个点为参考
  • 遵守少数服从多数,领域类A有1个,B有2个,可以得出该点属于B类。
    在这里插入图片描述

K近邻法

三个要素

距离度量:距离远近

特征空间中两个实例点的距离是两个实例点相似程度的反映。

k 近邻法中常用的距离度量有欧氏距离、曼哈顿距离等。

设图中有两点A和B。
在这里插入图片描述
欧氏距离是最常见的距离度量方法,它是在 n 维空间中两点之间的直线距离;如图,表现为AB之间的直线距离(绿色线)。

曼哈顿距离是在网格状空间中两点之间的最短距离,也称为出租车距离;如图,表现为两点在南北方向上的距离加上在东西方向上的距离(红色线),即d(i,j)=|xi-xj|+|yi-yj|。

蓝色线与黄色线为等价的曼哈顿距离。

K值:参考点的数量

k 值的大小直接影响着模型的复杂度和泛化能力。

若k值较小,进行预测时,只考虑训练数据中离待预测实例最近的少数几个样本,模型会变得复杂,对训练数据的拟合程度高,但可能会过拟合,对新数据的泛化能力较差;

若k值较大,模型会变得简单,考虑的训练样本较多,平滑效果好,能减少估计误差,但近似误差可能会增大,即对训练数据的拟合不够准确。

k值一般取奇数,避免分类平局。在分类问题中,当 k 值为偶数时,可能会出现两类样本数量相同的情况,导致分类结果出现平局,难以确定最终的类别。而选择奇数的 k 值,可以避免这种平局情况的发生,使得分类结果更加明确

分类决策规则:少数服从多数

在领域内,待分类的点的分类按照哪一个的样本类别相对于其他的样本类别多,就分类为哪一个类别。

描述语言

在这里插入图片描述

  • T:数据集
  • (x1,y1)…(xn,yn):每一个(x,y)都是一个样本
  • x1…xn:样本特征
  • y1…yn:样本类别
    在这里插入图片描述
  • 待分类样本称为(x,y)

算法步骤

  1. 根据距离度量k值计算x的领域。该领域称为Nₖ(x)。如下图,划分出了样本x的邻域。
    在这里插入图片描述
  2. 根据分类决策规则计算x的样本类别y。如上图,样本x的邻域中A类别有1个,B类别有2个,认为待分类样本为B类别。

如何计算样本x的最小距离样本

简单方法
  1. 计算每一个点到x的距离,并保存在数组中。
  2. 将数组排序,选取前k个即为x的邻域。
    在这里插入图片描述
    该方法简朴,但不够高效。
kd树

如图,以该7个点为例,需要知道7个点的二维坐标。
在这里插入图片描述

  1. 首先以x轴为标准,找到7个样本中x轴的中位数。只看x轴,中位数是479,为4节点,将节点4作为kd树的根节点。
  2. 以节点4的x轴为界,将平面分为左右两个部分。
    在这里插入图片描述
  3. 看左边的部分,现在以y轴为标准,找到左边部分y轴的中位数721,是节点1。将左边部分继续划分为两个部分。将节点1添加到kd树中。
    在这里插入图片描述
  4. 继续左上块部分,发现只有一个节点2,添加到kd树中,并认为是叶节点。(若不仅仅只有一个节点,按照上述步骤继续划分)
  5. 继续左下角部分,发现只有一个节点3,添加到kd树中,并认为是叶节点。
  6. 继续右侧部分,这里不再累述。

最后构建的kd树如图:
在这里插入图片描述
现在有个x样本如图:
在这里插入图片描述

  1. 从根节点出发,以x为标准,发现438<479,遍历左子树,到节点1。
  2. 以y为标准,发现681<721,遍历左子树,到叶节点2。
  3. 暂时认为节点2是距离x最近的节点,以节点x到节点2为半径画出查找范围(一个圆)
    在这里插入图片描述
  4. 回溯kd树到节点1,节点1的平面(荧光部分,注意不要被节点1上画的横线给骗了)与该圆相交,计算节点1到x的距离,发现值更小,更新最小距离样本和查找范围。
    在这里插入图片描述
  5. 更新后的查找范围中,节点1的另一个子节点节点3所在的平面和查找范围相交,故进入节点3。
    在这里插入图片描述
  6. 遍历到节点3,计算节点3到x的距离,发现值更小,更新最小距离样本和查找范围。
    在这里插入图片描述
  7. 回溯到节点4,计算节点4到x的距离,发现值较大,不更新查找范围。
  8. 根节点4的另一个子节点6所在的平面与查找范围相交,故进入节点6。计算节点6到x的距离,不需要更新最小距离样本和查找范围。
    在这里插入图片描述
  9. 节点6的一个左子节点5所在的平面与该查找范围无关系,不需要进入节点5;而另一个子节点7所在的平面与该查找范围相交,进入节点7,计算节点7到x的距离,不需要更新最小距离样本和查找范围。
    在这里插入图片描述

最后,得出与x最近的样本为节点3。

可以看到,在上述过程中,对节点5并未做计算,因此,在计算过程中,kd树可以减少计算量。

kd树检索的时间复杂度为O(logn)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值