NND今天终于把KD树弄懂了,花了劳资两个小时的有效时间

kd树

kd树的作用:
数据量大时快速找到临近的k点
避免每次重新计算距离,算法会把距离信息保存在一棵树里,需要时直接调用

kd树原理:
在这里插入图片描述

kd树核心:

1.树的建⽴;

建立kd树的核心原理:⼩于等于就进⼊左⼦树分⽀,⼤于就进⼊右⼦树分 ⽀直到叶⼦结点
在这里插入图片描述
在这里插入图片描述
取数据集:T={(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)} x轴按顺序排列选出中位数(x选出来后因为是二维向量坐标所以y也出来了(7,2))
1.在根节点先比较x坐标,比较完后,在下个坐标点比较y坐标
此处的作用是根据二分法的原理不断缩小范围来减少比较次数

在这里插入图片描述
最终把各个范围距离缩短绘画出这样的图形:
在这里插入图片描述

2.最近邻域搜索(Nearest-Neighbor Lookup)

在这里插入图片描述
样本集{(2,3),(5,4), (9,6), (4,7), (8,1), (7,2)}

重点来了,重点是运用最临近域搜索找出下面的这两个点,这两个点找出来你就完全弄懂了!

查找点(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为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)的右⼦ 空间去搜索。
⾄此,search_path为空,结束整个搜索,返回nearest(2,3)作为(2,4.5)的最近邻点,最近距离为1.5。

总结:

一. 总结kd树的构建过程
1.构造根节点
2.通过递归的⽅法,不断地对k维空间进⾏切分,⽣成⼦节点
3.重复第⼆步骤,直到⼦区域中没有示例时终⽌ 需要关注细节:a.选择向量的哪⼀维进⾏划分;b.如何划分数据
二. kd树的搜索过程【知道】
1.⼆叉树搜索⽐较待查询节点和分裂节点的分裂维的值,(⼩于等于就进⼊左⼦树分⽀,⼤于就进⼊右⼦树分 ⽀直到叶⼦结点)
2.顺着“搜索路径”找到最近邻的近似点
3.回溯搜索路径,并判断搜索路径上的结点的其他⼦结点空间中是否可能有距离查询点更近的数据点,如果有 可能,则需要跳到其他⼦结点空间中去搜索
4.重复这个过程直到搜索路径为空

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi洛一

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值