第3章 k 近邻法

k 近邻法(k-NN)是一种基于实例的学习方法,无法转化为对参数空间的搜索问题(参数最优化问题)。它的特点是对特征空间进行搜索。除了k近邻法,本章还对以下几个问题进行较深入的讨论:

  • 切比雪夫距离

    的计算
  • “近似误差”与“估计误差”的含义
  • k-d树搜索算法图解

一、算法

输入:训练集

为实例特征向量,
为实例的类别,

输出:实例

所属的类

设在给定距离度量下,涵盖最近k个点的邻域为

其中示性函数

寻找使得函数

取得最大值的变量
,也就是说,看看距离
最近的k个点里面哪一类别最多,以此作为输出。关于
的含义可参考本专栏的第一章。

mygame182:李航统计学习方法(第一章)​zhuanlan.zhihu.com

二、模型

根据模型的分类,k-NN模型属于非概率模型。

观察

可发现它与感知机不同的之处,作为决策函数,它并不需要任何未知参数(感知机需要确定w和b),直接从训练集的数据得到输出。
  1. 距离度量

k-NN的基本思想是,特征空间中的距离反映了两个点的相似程度,因此“距离”是作出分类判断的基本依据。向量空间

的距离有多种度量方式:

(1)不同距离度量

一般形式是闵可夫斯基距离

范数):

当p=1时,称为曼哈顿距离

范数):

当p=2时,称为欧几里得距离

范数),也就是最常用的距离:

时,称为

切比雪夫距离,它是各个坐标(分量)距离的最大值:

下图表示平面上A、B两点之间不同的距离:

三种距离对比
  • 只允许沿着坐标轴方向前进,就像曼哈顿街区的出租车走过的距离
  • 两点之间直线最短,通过勾股定理计算斜边的距离
  • 只剩下一个维度,即最大的分量方向上的距离

可见p取值越大,两点之间的距离越短。

(2)问题:为什么切比雪夫距离

其实这个问题等价于:为什么

,即
空间中的向量
,它的切比雪夫长度等于它的最大分量方向上的长度。

证明:

不妨设

,即

注意:最大分量的长度唯一,但最大分量可能并不唯一,设有

等k个分量的长度都等于

,即
时;

,即
为非最大长度分量时。

计算

的切比雪夫长度:

由于已知

等于0或1,且有k个分量结果为1,所以

因此

,得证。

以上证明参考

p范数的极限(无穷范数)为什么是极大值范数?​www.zhihu.com

(3)平面上的圆

在平面上的图像:

如果圆形的定义是“到某一点距离相等的曲线围成的图形”,那么在不同的距离度量下,圆形的形状可以完全不同。为何

正则化在平面上的等高线为同心正方形,不就很容易理解吗?

关于不同距离度量下的圆,可参考此文:

若 π 被证明是有理数会对世界有何影响?​www.zhihu.com

2. k值选择

书中引入了“近似误差”和“估计误差”两个概念,但没有给出具体定义。网上关于它们的解释众说纷纭,我把个人理解回答如下:

如何理解和区分近似误差和估计误差?​www.zhihu.com

简单总结一下:

右侧两项分别是“估计误差”和“近似误差”。

估计误差:训练集与无限数据集得到的模型的差距

近似误差:限制假设空间与无限制假设空间得到的模型的差距

k值越小

单个样本影响越大
模型越复杂
假设空间越大
近似误差越小(估计误差越大),容易过拟合;

k值越大

单个样本影响越小
模型越简单
假设空间越小
近似误差越大(估计误差越小),容易欠拟合。

一般通过交叉验证来确定最优的 k 值。

3. 决策规则

k 近邻的决策规则就是“多数表决”,即少数服从多数,用数学表达式表示为

等号左侧为误分类率,要是误分类率最小,就要使得

最大,即选择集合
中最多的一类。

三、kd树

尽管k-NN的原理简单易懂,但将其转化为高效的算法却不容易。

当然,我们可以逐个计算目标点

与训练集
的距离(欧氏距离),然后进行排序,得出k个最为接近的点。就是所谓“线性扫描”,这样显然效率不高。

于是,Jon Bentley在70年代提出了k-dimensions Tree 方法。

以最近邻算法(k=1)为例:为了减少计算距离的次数,首先根据维度特征把“训练集”按“二叉树”排列,再将目标点定位至某个较接近的“叶结点”,然后反向搜索最接近的“叶结点”(需要计算距离)。由于反向搜索在大部分情况下不需遍历整棵“二叉树”,因此可以减少计算距离的次数。在某些极端的情况下,例如:空间维度接近训练实例数,算法接近遍历整棵二叉树,此时就达不到减轻计算量的效果了。

书上已列出算法步骤,在此只对个别问题进行较深入的讨论:

(1)构造k-d树

  1. 切分坐标轴

    是什么意思?

此公式的目标是实现对坐标轴轮流切分,假设特征空间有3个维度,那么切分顺序是

对于书中的例子,k=2,

为当前结点的深度,例如:根结点深度为0 ,因此第一次切分轴为 0 (mod 2) + 1 =1,第二层结点深度为1,1(mod 2) + 1 =2,第三层结点深度为2,2(mod 2) + 1= 1。

也有资料把上述公式定义为

,坐标轴定义不同,可实现同样效果。

2. 为什么要轮流对不同坐标轴进行切分?

如果只对一个坐标轴(例如:x轴)进行切分,各块只包含x轴信息,把所有的y轴信息丢弃,显然会降低定位精度,无法使“叶节点”尽量接近“目标点”。

(2)k-d树搜索

算法3.3的第(1)、(2)步实现定位至“较接近”的叶结点。第(3)、(4)步是反向搜索的关键步骤,但没有代码,单纯文字描述实在令人费解。

关于k-d树搜索的过程,网上有不少参考资料,例如:

华盛顿大学:https://courses.cs.washington.edu/courses/cse373/02au/lectures/lecture22l.pdf

卡内基梅隆:https://www.cs.cmu.edu/~ckingsf/bioinfo-lectures/kdtrees.pdf

这里引用华盛顿大学的资料作为图解:

  1. 二叉树建立完毕。与书中的区别在于,切分面不过数据点,所有数据点位于底层结点:

2. 沿红色实线正向搜索二叉树,定位至“较接近”的g点

3. 计算q与g的距离为w,沿蓝色虚线反向搜索

4. 由于s4超平面对y轴切分,q的y坐标减去w小于s4的y坐标,因此球体与s4相交。需要正向搜索s4的另一侧结点。

5. 继续正向搜索,发现e点,计算q与e的距离,作为新的w

6. 反向搜索,直至发现与s1相交,开始正向搜索s1的另一侧

7. 发现结点f,反向搜索,再发现h,再反向......

8. 没有新的发现,搜索结束

从上面的过程来看,只需计算4个点的距离,如果“线性扫描”则需要计算9个点,大幅减少计算量。

如果从最近邻推广至k近邻,以上算法需作一定的修改。除了找到最近距离

,还需要保存其他点的距离
,以便进行排序确定最靠近的k 个点。

统计学习方法 pdf_李航统计学习方法(第三章)相关推荐

  1. 机器学习理论《统计学习方法》学习笔记:第三章 k近邻法

    机器学习理论<统计学习方法>学习笔记:第三章 k近邻法 3 k近邻法 3.1 K近邻算法 3.2 K近邻模型 3.2.1 模型 3.2.2 距离度量 3.2.3 K值的选择 3.2.4 分 ...

  2. 《统计建模与R软件》第三章课后习题3.5-3.11解题答案

    自学R语言,学习完了之后做一做习题,是对知识的一些巩固,也希望可以帮到正在学习的童鞋们. dev.new() par(mfrow=c(1,2)) s<-data.frame(d=c(2,4,3, ...

  3. 李航《统计学习方法》第三章课后答案链接

    李航<统计学习方法>第三章课后答案链接 我的天呐竟然木有百度到...是因为太简单了吗...

  4. 《统计学习方法》(李航)读书笔记(转)

    <统计学习方法>(李航)读书笔记(转) http://www.cnblogs.com/limitlessun/p/8611103.html#_label4 阅读目录 知识点 感知机 k近邻 ...

  5. 【李航统计学习方法】感知机模型

    目录 一.感知机模型 二.感知机的学习策略 三.感知机学习算法 感知机算法的原始形式 感知机模型的对偶形式 参考文献 本章节根据统计学习方法,分为模型.策略.算法三个方面来介绍感知机模型. 首先介绍感 ...

  6. 《统计学习方法》--李航 学习笔记

    <统计学习方法>--李航 第一章 统计学习方法三要素: 模型 模型评估与模型选择 正则化与交叉验证 正则化 交叉验证 泛化能力 生成模型与判别模型 生成方法 判别方法 分类问题.标注问题. ...

  7. 《统计学习方法》——李航 学习大纲

    最近在学习李航写的统计学习方法概论, 每一章都用xmind理清了思路,括号里是书里的公式,第一次写博文,敬请指教~~~~ 第一章 统计学习方法论 第二章 感知机 每个方法其实只需要着重掌握三要素和输入 ...

  8. 《统计学习方法》--李航

    机器学习简述 统计学习 知乎详细 是什么:是关于计算机基于数据构建概率统计模型并运 用模型对数据进行预测与分析的一门学科.统计学习也称为统计机器学习. 对象:是数据(data).它从数据出发,提取数据 ...

  9. 第五章——决策树笔记(《统计学习方法》-李航)

    第五章--决策树笔记(<统计学习方法>-李航) 本文主要记录自己学习李航的小蓝书的过程,之前的4张有时间再补上.本文只做知识点整理,不做详细的见解,因为我认为,依照本人的知识水平,不可能比 ...

最新文章

  1. 剑指offer:树的子结构
  2. oracle dg备份恢复,DG丢失归档,使用增量备份恢复一例
  3. iOS开发UI篇—手写控件,frame,center和bounds属性
  4. UVA 12108 Extraordinarily Tired Students
  5. c语言的有趣小程序,一个有趣的小程序
  6. Win10系统添加 Win10 LTSC2019闹钟
  7. display inline-block 垂直居中
  8. EasyImage图床源码V2.0
  9. 可用的免费公开的DNS
  10. 内存数据集产生的隐性成本
  11. 用python画三角函数
  12. 老李分享:Android性能优化之内存泄漏3
  13. [design decision] user awareness: 自动安装还是不自动安装?
  14. 2018年苏大计算机考研872真题及解析
  15. Kindle多看系统中字典
  16. 用c语言实现下载文件
  17. 【已解决】win10+py3.6+anaconda3 安装fbprophet(利用安装包离线安装)
  18. 在实际项目开发中,你遇到过Spring事务失效的场景吗?如何解决?
  19. 做“合规”的数据处理者 | 一文图解《网络数据安全管理条例》
  20. mysql mgr recovering_深度理解MySQL Group Replication的RECOVERING状态

热门文章

  1. opencv打开相机实时采集与处理
  2. HALCON基于灰度值的模板匹配
  3. 鸿蒙投屏和普通投屏,华为智慧屏SE发布:预装鸿蒙 可一碰投屏
  4. bootstraptable设置行高度_条码打印软件中不干胶卷纸的标签设置方法
  5. python列表去重_Python中对列表list去重
  6. php发送指令,PHP发送AT指令实例代码
  7. 伯克利论断:Serverless 才是云时代的主宰
  8. Python3 与 C# 网络编程之~ 网络基础篇
  9. 面试 6:调整数组顺序使奇数位于偶数前面
  10. Nginx-场景实践篇