K邻近算法k值选取以及kd树概念、原理、构建方法、最近邻域搜索和案例分析

news2024/11/17 11:32:54

一、k值选择

  • K值过小:容易受到异常点的影响
  • k值过大:受到样本均衡的问题

近似误差:对现有训练集的训练误差,关注训练集,如果近似误差过小可能会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测。模型本身不是最接近最佳模型

估计误差:可以理解为对测试集的测试误差,关注测试集,估计误差小说明对未知数据的预测能力好,模型本身最接近最佳模型

  1. 选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合
  2. 选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单
  3. K=N(N为训练样本个数),则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单,忽略了训练实例中大量有用信息

在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是把训练数据在分成两组:训练集和验证集)来选择最优的K值。对这个简单的分类器进行泛化,用核方法把这个线性模型扩展到非线性的情况,具体方法是把低维数据集映射到高维特征空间

二、kd树

2.1 kd树概述

实现k近邻法时,主要考虑的问题是如何对训练数据进行快速k近邻搜索。这在特征空间的维数大及训练数据容量大时尤其必要

k近邻法最简单的实现是线性扫描(穷举搜索),即要计算输入实例与每一个训练实例的距离。计算并存储好以后,再查找K近邻,当训练集很大时,计算非常耗时

为了提高kNN搜索的效率,可以考虑使用特殊的结构存储训练数据,以减小计算距离的次数

根据KNN每次需要预测一个点时,我们都需要计算训练数据集里每个点到这个点的距离,然后选出距离最近的k个点进行投票。当数据集很大时,这个计算成本非常高,针对N个样本,D个特征的数据集,其算法复杂度为O(DN^2)

kd树(K-dimension tree):一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构,为了避免每次都重新计算一遍距离,算法会把距离信息保存在一棵树里,这样在计算之前从树里查询距离信息,尽量避免重新计算

基本原理:如果A和B距离很远,B和C距离很近,那么A和C的距离也很远。有了这个信息,就可以在合适的时候跳过距离远的点,这样优化后的算法复杂度可降低到O(DNlog(N))

2.2 kd树原理

黄色的点作为根节点,上面的点归左子树,下面的点归右子树,接下来再不断地划分,分割的那条线叫做分割超平面(splitting hyperplane),在一维中是一个点,二维中是线,三维的是面

黄色节点就是Root节点,下一层是红色,再下一层是绿色,再下一层是蓝色(垂直切)

1.树的建立;

2.最近邻域搜索(Nearest-Neighbor Lookup):kd树是一种二叉树,表示对k维空间的一个划分,构造kd树相当于不断地用垂直于坐标轴的超平面将K维空间切分,构成一系列的K维超矩形区域。kd树的每个结点对应于一个k维超矩形区域。利用kd树可以省去对大部分数据点的搜索,从而减少搜索的计算量

类比“二分查找”:给出一组数据:[9 1 4 7 2 5 0 3 8],要查找8。若挨个查找(线性扫描),需将所有数据集都遍历一遍。若先排序为:[0 1 2 3 4 5 6 7 8 9],按前一种方式进行了很多没有必要的查找,现若以5为分界点,则数据集被划分为了左右两个“簇” [0 1 2 3 4]和[6 7 8 9]

因此,没必要进入第一个簇,可直接进入第二个簇进行查找。把二分查找中的数据点换成k维数据点,这样的划分就变成了用超平面对k维空间的划分。空间划分就是对数据点进行分类,“挨得近”的数据点就在一个空间里面

2.3 kd树构造方法

  1. 构造根结点,使根结点对应于K维空间中包含所有实例点的超矩形区域
  2. 通过递归不断地对k维空间进行切分,生成子结点。在超矩形区域上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选定的切分点并垂直于选定的坐标轴,将当前超矩形区域切分为左右两个子区域(子结点),这时,实例被分到两个子区域
  3. 上述过程直到子区域内没有实例时终止(终止时的结点为叶结点)。在此过程中,将实例保存在相应的结点上
  4. 通常,循环的选择坐标轴对空间切分,选择训练实例点在坐标轴上的中位数为切分点,这样得到的kd树是平衡的(平衡二叉树:它是一棵空树,或其左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是平衡二叉树)

kd树中每个节点是一个向量,和二叉树按照数的大小划分不同的是,KD树每层需要选定向量中的某一维,然后根据这一维按左小右大的方式划分数据。在构建KD树时,关键需要解决2个问题:

  1. 选择向量的哪一维进行划分
  2. 如何划分数据

第一个问题简单的解决方法可以是随机选择某一维或按顺序选择,但是更好的方法应该是在数据比较分散的那一维进行划分(分散的程度可以根据方差来衡量)。好的划分方法可以使构建的树比较平衡,可以每次选择中位数来进行划分,这样问题2也得到了解决

三、案例分析

3.1 树的建立

给定一个二维空间数据集:T={(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},构造一个平衡kd树

根结点对应包含数据集T的矩形,选择x轴,6个数据点的x坐标中位数是6,这里选最接近的(7,2)点,以平面x=7将空间分为左、右两个子矩形(子结点),接着左矩形以y=4分为两个子矩形(左矩形中{(2,3),(5,4),(4,7)}点的y坐标中位数正好为4),右矩形以y=6分为两个子矩形,如此递归,最后得到如下图所示的特征空间划分和kd树,具体步骤如下

  • 先进行排序
    • x轴:2,4,5,7,8,9,9-2=7,方差更大
    • y轴:1,2,3,4,6,7 ,7-1=6,方差更小
  • 第一次:选择方差更大的切分,故首先选择x轴切分,x轴中选中间那个数切分,即5和7选任意一个数,这里选择(7,2)作为根节点,则左边对应点为(2,3),(4,7),(5,4),右边对应点为(8,1),(9,6)
  • 第二次:划分左右边对应数后,由于是垂直切分,从y轴开始选择,故再对y轴数进行排序
    • 左边数(2,3),(4,7),(5,4)中y轴数排序为:3,4,7
    • 右边数(8,1),(9,6)中y轴数排序为:1,6
    • 故第二次对(5,4)和(9,6)进行切分
  • 第三次:再对垂直于y轴的x轴进行切分:剩余点由于(5,4)左边只有一个点(2,3),右边只有一个点(4,7),(9,6)左边只有一个点(8,1),右边无,故直接进行切分

3.2 最近邻域的搜索 

假设标记为星星的点是测试点, 绿色的点是找到的近似点,在回溯过程中,需要用到一个队列,存储需要回溯的点,在判断其他子节点空间中是否有可能有距离查询点更近的数据点时,做法是以查询点为圆心,以当前的最近距离为半径画圆,这个圆称为候选超球(candidate hypersphere),如果圆与回溯点的轴相交,则需要将轴另一边的节点都放到回溯队列里面来

查找点(2.1,3.1) 

  • 在(7,2)点测试到达(5,4),在(5,4)点测试到达(2,3),然后search_path中的结点为<(7,2),(5,4),(2,3)>,从search_path中取出(2,3)作为当前最佳结点nearest, dist为\sqrt{\left ( 2-2.1 \right )^{2}+\left ( 3-3.1 \right )^{2}} = 0.141
  • 然后回溯至(5,4),以(2.1,3.1)为圆心,以dist=0.141为半径画一个圆,并不和超平面y=4相交,如上图,所以不必跳到结点(5,4)的右子空间去搜索,因为右子空间中不可能有更近样本点了
  • 于是再回溯至(7,2),同理,以(2.1,3.1)为圆心,以dist=0.141为半径画一个圆并不和超平面x=7相交,所以也不用跳到结点(7,2)的右子空间去搜索
  • 至此,search_path为空,结束整个搜索,返回nearest(2,3)作为(2.1,3.1)的最近邻点,最近距离为0.141

查找点(2,4.5)

  • 在(7,2)处测试到达(5,4),在(5,4)处测试到达(4,7)【优先选择在本域搜索】,然后search_path中的结点为<(7,2),(5,4), (4,7)>,从search_path中取出(4,7)作为当前最佳结点nearest, dist为3.202
  • 然后回溯至(5,4),以(2,4.5)为圆心,以dist=3.202为半径画一个圆与超平面y=4相交,所以需要跳到(5,4)的左子空间去搜索。所以要将(2,3)加入到search_path中,现在search_path中的结点为<(7,2),(2, 3)>;另外,(5,4)与(2,4.5)的距离为3.04 < dist = 3.202,所以将(5,4)赋给nearest,并且dist=3.04
  • 回溯至(2,3),(2,3)是叶子节点,直接平判断(2,3)是否离(2,4.5)更近,计算得到距离为1.5,所以nearest更新为(2,3),dist更新为(1.5)
  • 回溯至(7,2),同理,以(2,4.5)为圆心,以dist=1.5为半径画一个圆并不和超平面x=7相交, 所以不用跳到结点(7,2)的右子空间去搜索

首先通过二叉树搜索(比较待查询节点和分裂节点的分裂维的值,小于等于就进入左子树分支,大于就进入右子树分支直到叶子结点),顺着“搜索路径”很快能找到最近邻的近似点,也就是与待查询点处于同一个子空间的叶子结点

然后再回溯搜索路径,并判断搜索路径上的结点的其他子结点空间中是否可能有距离查询点更近的数据点,如果有可能,则需要跳到其他子结点空间中去搜索(将其他子结点加入到搜索路径)

重复这个过程直到搜索路径为空

学习导航:http://xqnav.top/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于RockyLinux8.7一键安装OpenStack Yoga版本

硬件环境 虚拟软件&#xff1a;vmware workstation16 操作系统&#xff1a;RockyLinux8 虚拟机硬件配置&#xff1a; CPU&#xff1a;2 memory&#xff1a;8G disk&#xff1a;80G net card&#xff1a;1个—VMnet8 ip/netmask&#xff1a;192.168.9.160/24 下载并安装RockyL…

python:最小二乘法拟合原理及代码实现

这里写目录标题原理代码实现原理 最小二乘法适用于对处理的一堆数据&#xff0c;不必精确的经过每一点&#xff0c;而是根据图像到每个数据点的距离和最小确定函数。需要注意的是&#xff0c;最小二乘是对全局进行拟合优化&#xff0c;对噪声比较敏感&#xff0c;所以如果有噪…

知识点7--Docker的容器命令

本篇为大家介绍Docker的容器命令&#xff0c;也顺带着让大家明白Docker和vmware都属于虚拟化技术下的软件&#xff0c;但是他们的不同之处不止在于运行的系统不同&#xff0c;他们的运行逻辑也不同&#xff0c;VMware是虚拟化完整的系统&#xff0c;而docker是隔离一个进程&…

03 - 调试环境的搭建(Bochs)(实验未完)

---- 整理自狄泰软件唐佐林老师课程 1. Bochs&#xff08;另一款优秀的虚拟机软件&#xff09; 专业模拟x86架构的虚拟机 开源且高度可移植&#xff0c;由C编写完成 支持操作系统开发过程中的断点调试 通过简单配置就能运行绝大多数主流的操作系统 2. Bochs的安装与配置 下载…

数字化升级里,RPA的下一步正在走向哪?

如果说&#xff0c;API这种能力在2021年并未成为“刚需”&#xff0c;那么在2022年其已经一跃成为RPA进入企业真正场景的“必需品”。 作者|斗斗 编辑|皮爷 出品|产业家 今年八月&#xff0c;调查机构Gartner发布了2022全球RPA魔力象限。 数据显示&#xff0c;2021年&a…

空间直接坐标系(XYZ)转经纬度(BLH)

本章首先介绍空间直角坐标系与大地坐标系&#xff0c;然后列出XYZ转换BLH的公式&#xff0c;最后基于C语言完成该部分代码设计。 参考书籍&#xff1a; 董大男&#xff0c;陈俊平&#xff0c;王解先等&#xff0c;GNSS高精度定位原理&#xff0c;科学出版社 黄丁发&#xff0c;…

图扑软件荣获第七届“创客中国”中小企业创新创业大赛优胜奖

2022 年 11 月 17 日&#xff0c;由工业和信息化部、财政部共同主办的第七届“创客中国”中小企业创新创业大赛全国总决赛在浙江杭州落下帷幕。 本次《第七届“创客中国”中小企业创新创业大赛》举办目的&#xff0c;意在加大优质中小企业梯度培育力度&#xff0c;进一步提升中…

高新技术企业如何规划

如何提高申报高企的成功率&#xff0c;应该是很多企业关心的一个问题。 2022年高新技术企业申报已经结束&#xff0c;今年第三批申报的企业结果也将公示&#xff0c;有客户会问&#xff0c;历年来你们申报高企通过率这么高&#xff0c;是怎么做到的&#xff1f; 那么现在呢&a…

《痞子衡嵌入式半月刊》 第 66 期

痞子衡嵌入式半月刊&#xff1a; 第 66 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻&#xff0c;农历年分二十四节气&#xff0c;希望在每个交节之日准时发布一期。 本期刊是开源项目&#xff08;GitHub: JayHeng/pzh-mcu-bi-weekly&#xff09;&#xff0c;欢…

Spring 框架下如何调用kafka

1、Spring 项目代码结构如下&#xff1a; 2、数据库资源配置文件如下&#xff1a; #sql配置文件 spring.datasource.driver-class-namecom.microsoft.sqlserver.jdbc.SQLServerDriver #.19為測試地址&#xff0c;.13為正式地址 spring.datasource.urljdbc:sqlserver://172.12.…

[ 红队知识库 ] 常见防火墙(WAF)拦截页面

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu交叉编译Arm Linux环境下的身份证读卡器so库操作步骤

1、配置环境变量 ①将gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar解压至/home/eastcoms/ sudo或者root运行命令 &#xff1a;sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar -C /home/eastcoms .tar用 -xvf .gz用 -zxvf .bz2用 -jxvf …

easypoi导入案例

文章目录easypoi导入案例一、依赖二、导出模板1、excel模板实体类(同下)2、具体实现类3、easypoi工具类中的方法4、自定义样式类三、导入校验1、excel模板实体类2、具体实现类3、自定义信号导入校验类easypoi导入案例 一、依赖 <dependency><groupId>cn.afterturn…

第7 部分 HDLC 和PPP

路由器经常用于构建广域网&#xff0c;广域网链路的封装和以太网上的封装有着非常大的差别。常见的广域网封装有HDLC&#xff0c;PPP 和Frame-relay 等&#xff0c;本次介绍HDLC 和PPP。相对而言&#xff0c;PPP 比HDLC 有较多的功能。 7.1 HDLC 和PPP 简介 7.1.1 HDLC 介绍 H…

批处理及有状态等应用类型在 K8S 上应该如何配置?

众所周知, Kubernetes(K8S)更适合运行无状态应用, 但是除了无状态应用. 我们还会有很多其他应用类型, 如: 有状态应用, 批处理, 监控代理(每台主机上都得跑), 更复杂的应用(如:hadoop 生态...). 那么这些应用可以在 K8S 上运行么? 如何配置? 其实, K8S 针对这些都有对应的不…

操作系统:存储器管理 练习题(带有详细答案解析)

文章目录1.存储器的层次结构2.程序的装入和链接2.1.程序的装入2.2.程序的链接3.连续分配存储管理方式3.1.单一连续分配3.2.固定分区分配3.3.动态分区分配3.4.基于顺序搜索的动态分区分配算法3.5.基于索引搜索的动态分区分配算法3.6.动态可重定位分区分配4.对换4.1.多道程序环境…

SBT 树原理和实战

一 基本概念 SBT&#xff08;Size Balanced Tree&#xff0c;节点大小平衡树&#xff09;是一种自平衡二叉查找树&#xff0c;通过子树的大小来保持平衡。与红黑树、AVL 树等自平衡二叉查找树相比&#xff0c;SBT更易于实现。SBT 可以在 O (logn) 时间内完成所有二叉搜索树的相…

【考研】操作系统复习冲刺(2023年408)

前言 本文内容主要源自于王道讲解的学习笔记总结。梳理《操作系统》考点&#xff08;以理论为重点&#xff09;&#xff0c;并对重点内容划下横线和加粗标注&#xff0c;方便考研复习。 可搭配以下链接一起学习&#xff1a; 【考研复习】《操作系统原理》孟庆昌等编著课后习…

数字IC手撕代码-同步FIFO

前言&#xff1a; 本专栏旨在记录高频笔面试手撕代码题&#xff0c;以备数字前端秋招&#xff0c;本专栏所有文章提供原理分析、代码及波形&#xff0c;所有代码均经过本人验证。 目录如下&#xff1a; 1.数字IC手撕代码-分频器&#xff08;任意偶数分频&#xff09; 2.数字…

磁环选型攻略及EMC整改技巧

磁环选型攻略及EMC整改技巧 今天跟大家分享一下磁环选型及应用相关的知识&#xff0c;希望对你有帮助。 本文将从以下四个方面对磁环进行阐述。 一、磁环的应用场景 首先我们来看几张图片 图1 显示屏VGA线 图2 适配器连接线 图3 USB通信线 这三根线都是我们生活中常见的供电…