【李航统计学】Chap3:K近邻(总结+代码实现+课后题)

统计学笔记 专栏收录该内容
3 篇文章 0 订阅

1. K近邻算法

  • k近邻法(k-nearest neighbor, KNN)是一种基本的分类与回归方法,在这里我们只讨论分类问题中的K近邻。
  • k近邻法假设给定的一个数据集,其中的实例类别已定。分类时,对于新的实例,跟据其K个最近邻的训练实例的类别,通过多数表决等方式进行预测。
  • 特别的,我们将k=1的特殊情形成为最近邻算法

2. K近邻模型

k近邻法主要包括三个基本要素:K值选择,距离度量以及分类决策规则
特征空间中,对于每个训练实例 x i x_i xi,距离该点比其他点更近的所有点所组成的一个区域叫做单元(cell)。每个训练实例拥有一个单元,所有训练实例的单元构成对特征空间的一个划分

2.1 距离度量

特征空间中两个实例点的距离是两个点相似度的度量方式。
L p L_p Lp距离(Minkowski距离)
在这里插入图片描述
在这里插入图片描述

  • p=1时,为满汉顿距离(Manhattan distance)
    在这里插入图片描述
  • p=2时,称为欧氏距离(Euclidean distance)
    在这里插入图片描述
  • p=3时,称为切比雪夫距离(Chebyshev distance),即各个坐标距离的最大值
    在这里插入图片描述

2.2 k值的选择

  • 如果选择较小的K值,相当于用较小的邻域中的训练实例进行预测,近似误差(approximation error)会减小,只有与输入实例较近的训练实例才会对预测结果起作用;但是估计误差(estimation error)会增大,预测结果会对近邻实例点非常敏感。
  • k值越小则模型越复杂,更易产生过拟合。实际应用中一般取一个较小的数值,通过交叉验证法来选取最优的K值。

2.3 分类决策规则

K近邻法中的分类决策规则往往为多数表决规则(majority voting rule)

2.4 代码实现

3. K近邻法的实现:kd树

实现K近邻法时,主要问题是如何针对训练数据进行快速的K近邻搜索。

  • 最简单的方式是线性扫描,计算输入实例与每一个训练实例的距离,显然耗时不可行
  • 为提高K近邻的搜索效率,使用特殊的数据结构存储训练数据来减少计算距离的次数,举栗kd树。

3.1 构造kd树

kd树树是一种对于k维空间中的实例点进行存储以便对其快速进行查找的一种树形数据结构,属于二叉树,表示对K维空间的一个划分。

  • kd树是储存k维空间数据的树结构,这里的k不是k近邻的k

3.1.1 算法流程

在这里插入图片描述

3.1.2 一个栗子

在这里插入图片描述
在这里插入图片描述
(中位数应该是 x ( 1 ) = 6 x^{(1)}=6 x(1)=6,但是 x ( 1 ) = 6 x^{(1)}=6 x(1)=6上没有数据点,故选择 x ( 1 ) = 7 x^{(1)}=7 x(1)=7
在这里插入图片描述

3.1.3 代码实现

稍后补…

3.2 搜索kd树

利用kd树可以省去对大部分数据点的搜索,从而减少搜索的计算量。

3.2.1 算法实现

在这里插入图片描述

3.2.2 时间复杂度

在这里插入图片描述

3.2.3 举个栗子

在这里插入图片描述
在这里插入图片描述

3.2.4 代码实现

4. 课后习题

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

baekii

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值