knn基础与优化2--ball tree、LSH

本文深入探讨了两种knn算法优化技术——ball tree和LSH。ball tree利用超球面划分空间,提高了高维数据的搜索效率。LSH则是局部敏感哈希,通过特定的哈希函数,使相似数据点有更高概率落入同一桶,用于近似最近邻搜索。文章介绍了这两种方法的基本原理、关键特性及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ball-tree

为了改进kd-tree沿着笛卡尔坐标进行划分的低效率,ball tree将使用超球面而不是超平面来划分空间。虽然在构建数据结构的花费上大过于kd-tree,但是在高维甚至很高维的数据上都表现的很高效。ball tree的节点保存圆心和半径,节点每次分裂都生成两个小的超球空间,不断分裂直至节点包含的数据点数量小于一定值,如下图所示。

(from:https://blog.youkuaiyun.com/skyline0623/article/details/8154911

不同层次的圆被用不同的风格画出。树中的每个结点对应一个圆,结点的数字表示该区域包含的观测点数,但不一定就是图中该区域囊括的点数,因为有重叠的情况,并且一个观测点只能属于一个区域。

节点分裂方法如下:选择一个距离当前圆心最远的观测点i1,和距离i1最远的观测点 i2,将圆中其它观测点根据距离分别赋给这两个观测点所代表的簇,然后计算每一个簇的中心点和包含所有其所属观测点的最小半径。
使用ball tree时,先自上而下找到包含target的叶子结点,从此结点中找到离它最近的观测点。这个距离就是最近邻的距离的上界。检查它的兄弟结点中是否包含比这个上界更小的观测点。方法是:如果目标点距离兄弟结点的圆心的距离大于兄弟圆半径加上前面的上界的值(两圆不可能相交,三角形不等式),则这个兄弟结点不可能包含所要的观测点(如下图所示);否则,检查这个兄弟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值