文章目录

  • 1. 初识K近邻
  • 2. 相知
    • 2.1 K近邻三要素
    • 2.2 KD树
      • 2.2.1 kd树的构建
      • 2.2.2 kd树的搜索
  • 3. 总结

1. 初识K近邻

K-近邻(K-Nearest Neighbors, KNN)可以说是整个机器学习算法中最为简单的几个算法之一了,但即使是在目前大火的深度学习算法里也可以看它的影子,简单好用,学起来就完事了。简单点来说,给定一个训练集,找到其映射到特征空间中的对应向量,保存下来。当新来了一个测试实例,找到其在特征空间中最近的K个实例,看在这K个实例中属于哪一个类别的最多,就给测试样本赋予对应的标签

当K=1时,为最近邻算法


如上图所示,训练集有两类(蓝色、红色),新来了一个样本(绿色),要判断其属于哪一类。KNN算法就是在整个特征空间找到最近的K个参考对象(K=3),这K个对象里属于哪一个类别的数目多,就是赋予新样本对应的标签。比如这个例子中新样本就为红色类别。

2. 相知

2.1 K近邻三要素

三个基本要素:K值选择、距离度量、分类决策规则

模型:模型很简单,上一节就已经介绍过了,更公式化的定义可以参考李航老师的《统计学习方法》。这里提一下模型的本质,抛去测试过程,当确定三要素后,KNN根据训练集样本将特征空间划分成不同子空间,每个子空间的类别被确定,如下图所示。(如果不理解这句话,可以考虑最近邻的情况)

距离度量:常用的距离度量就是欧式距离,但其实任何距离度量都可以。这里展示一下LpL_pLp​距离,不同的p有着不同的含义,这里就不展开讲了,贴一张图。

如下图所示,展示了LpL_pLp​距离在p取不同时,在R2R^2R2空间上的一条等高线(线上的点与原点的距离相等),感兴趣的同学可以扩展到损失函数中的L1、L2正则化。

需要注意的是,不同度量下得到的最近邻可能不一样

k值的选择:当K值较小时,那么在测试时选择的领域范围就大,学习的近似误差减小(只有与输入较近的实例才会对预测结果起作用),估计误差增加(对近邻的实例点非常敏感,收益受噪声影响);当K值过大时,选择的领域范围就大,会减小模型的估计误差,但会增加学习的近似误差。

也可以说k值越小,模型越复杂,越容易过拟合;K值越大,模型变简单,极端情况K=N时,所有输出都一样。

近似误差与估计误差:https://blog.csdn.net/qq_35664774/article/details/79448076

k值一般取一个比较小的数值,通常采用交叉验证法来选取最优的k值。

分类决策规则:多数表决(等价于经验风险最小化,证明见《统计学习方法》)

2.2 KD树

k 近邻法最简单的实现方法是线性扫描(linear scan),即计算输入实例与每一个训练实例的距离。但当训练集很大时,这种方法非常耗时。而KD树(k-dimensional tree)可以提高搜索效率,减少计算量。kd树是一种对k维空间中的实例点进行储存以便对其进行快速检索的树形数据结构,其本质是二叉树,可以将最近邻的搜索时间由O(N)O(N)O(N)降低到O(NlogN)O(NlogN)O(NlogN)。

2.2.1 kd树的构建

kd树构建的核心思想就是递归地对数据进行垂直划分,具体流程如下:


其中(1)表示递归的初始条件,(2)表示递归逻辑,(3)为终止条件。上面的算法流程可能比较难以理解,其实通俗点理解就是:对于N个k维的训练数据,knn需要将其划分为N个区域,首先选取第一个维度,将所有数据按整个维度进行排序,选取中位数所对应的节点作为根节点。在该维度上小于该节点的值划分到左子树,大于该节点的值划分到右子树。这样就已经先划分成两个区域了,然后选取第二个维度,分别对这2个区域进行类似的划分(找到中位数节点进行划分),就这样依次递归下去,知道所有子区域都没有实例存在。【整个过程类似于平衡二叉搜索树的构建】

强烈推荐该视频:https://www.bilibili.com/video/BV1No4y1o7ac?p=21,看完你就懂了,也包含了实例的讲解。


2.2.2 kd树的搜索

kd树主要是为了加速KNN的检索过程,也就是说给定一个测试样本,去找到它对应的K个最近邻样本。以最近邻为例(很容易扩展到k近邻),其仍是一个递归的过程。具体流程如下:


对于构造的kd树,首先按照每个维度对应的划分找到一个叶子节点,将该叶子节点作为ans。递归地进行回退:首先检查该节点的兄弟节点是否比这个叶子节点更近,如果更近则进行转移,否则回退到父节点,然后计算距离是否更近,如果更近就更新ans。最后回退到根节点,就搜索结束,返回的ans即为最近邻节点。

对应的视频与示例:https://www.bilibili.com/video/BV1No4y1o7ac?p=22

3. 总结

KNN是最简单的分类与回归算法,虽然上面只介绍了分类的步骤,但是回归方法也是类似,进行KNN然后求均值作为结果返回。KNN三大要素:距离度量、k值选择、分类决策规则,其中K值越小模型越复杂,近似误差低,K值越大模型越简单,估计误差低。

K近邻算法虽然简单,但其局限性也非常明显。算法并没有根据数据显著地构建一个模型,而是存储了所有训练集特征,当训练数据很大时,时间和空间复杂度将会非常高。因此为了进一步提高计算效率,采用kd树进行优化。

【机器学习经典算法】K近邻(KNN):核心与总结相关推荐

  1. python人工智能——机器学习——分类算法-k近邻算法

    分类算法-k近邻算法(KNN) 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. 来源:KNN算法最早是由Cover和Hart提 ...

  2. python人工智能——机器学习——分类算法-k近邻算法——kaggle案例: Facebook V: Predicting Check Ins

    题目及翻译 Facebook and Kaggle are launching a machine learning engineering competition for 2016. Faceboo ...

  3. 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

    (一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...

  4. 机器学习——聚类之k近邻算法及python使用

    聚类算法之k近邻及python使用 什么是k近邻算法 k近邻算法流程 使用sklearn进行代码实现 数据集介绍 标准化 代码实现 写在开头,套用我的老师的一句话目前所有自然学科的前沿都是在研究数学, ...

  5. 09_分类算法--k近邻算法(KNN)、案例、欧氏距离、k-近邻算法API、KNeighborsClassifier、及其里面的案例(网络资料+学习资料整理笔记)

    1 分类算法–k近邻算法(KNN) 定义:如果一个样本在特征空间中**k个最相似(即特征空间中最邻近)**的样本中的大多数属于某一个类别,则该样本也属于这个类别,则该样本也属于这个类别. k-近邻算法 ...

  6. k近邻算法_K近邻(knn)算法是如何完成分类的?

    摘要:K近邻算法是机器学习中的一个非常基础的算法.本文通过自生成数据,通过绘图的方式演示KNN算法的思路,让你不看数学公式就看了解什么是KNN算法. 关键词:KNN算法 1 生成一个二分类的数据集 本 ...

  7. 机器学习算法——K近邻法

    K近邻算法 k近邻算法(k-nearest neighbor,k-NN)是一种基本分类与回归方法.k-近邻算法的输入为实例的特征向量,对应于特征空间的点:输出为实例的类别,可以取多类.k-近邻算法假设 ...

  8. Python+OpenCV:理解k近邻(kNN)算法(k-Nearest Neighbour (kNN) algorithm)

    Python+OpenCV:理解k近邻(kNN)算法(k-Nearest Neighbour (kNN) algorithm) 理论 kNN is one of the simplest classi ...

  9. 第4章 最基础的分类算法-k近邻算法

    思想极度简单 应用数学知识少 效果好(缺点?) 可以解释机器学习算法使用过程中的很多细节问题 更完整的刻画机器学习应用的流程 distances = [] for x_train in X_train ...

  10. 机器学习初学者手抄本:数学基础、机器学习经典算法、统计学习方法等

    机器学习怎么学?当然是系统地学习了.没有时间这么办呢?利用碎片时间学习!很多人一天要花 2 个小时通勤,通勤路上有很多时间看手机.于是我把一些机器学习的基础知识做成了在线的机器学习手册,只需打开微信收 ...

最新文章

  1. spring hibernate 连接sqlserver 数据库的时候还需要jdbc包吗?
  2. kali linux提示安装系统失败,kali“安装系统”失败分析及解决
  3. 【计算理论】计算复杂性 ( P 类 | 有效算法函数 | NP 直觉 | NP 简介 | NP 类严格数学定义 )
  4. 内置装饰器一:@classmethod、@staticmathod
  5. 深究Spring中Bean的生命周期
  6. ASP.NET适合做互联网吗,适合做电子商务平台吗?
  7. python中所有数值都可以准确比较是否相等_在python里,禁用== = = 以及is和in,如何判断两个数字的值是否相等?...
  8. python可以下载百度文库_百度文档,用Python一键免费下载
  9. 【PI调节】对PI调节的一些认识
  10. 如何卸载CAD 2020 ?怎么把AutoCAD 2020彻底卸载删除干净重新安装的方法【转载】
  11. 如何制作PE系统盘?
  12. 叶檀:别上了美国人的当 加息会给中国致命一击
  13. 开发8年的老Android才知道,赶紧收藏备战金三银四!
  14. 如何刷PTA,达到PTA甲级、乙级、顶级应具备的能力
  15. android vitamio 缓存,Android如何集成Vitamio
  16. MATLAB亚像素定位,亚像素精准边缘定位
  17. “会员制营销”和“E-mail营销”的培训方案
  18. 创业第16天,设计竞价助手的关键字添加界面
  19. ServerSQL数据库查锁、解锁
  20. ITMars分享|IT运维工作到底是做什么的?

热门文章

  1. Xrm.Page.data.entity Properties and Methods
  2. 搭建无广告免费小说网站------简述(一)
  3. 中国工程院院士、中国人工智能学会理事长李德毅:人工智能研究新进展
  4. “一见钟情” 文证通证件识别让旅行证件不再寂寞
  5. 移动端APP设计规范
  6. 《HTML 编辑器》
  7. 强势Mac机网站设计软件:10大最佳HTML编辑器
  8. 求主对角线上各元素之和(C语言)
  9. 九年级计算机教学课时计划,信息技术教学计划(精选3篇)
  10. html发票页面,HTML5 发票模板