Ball Tree

本文介绍了KD树在低维度数据中的高效性及其在高维度时面临的‘维度灾难’问题。为了解决这个问题,文章提出了Ball树,这是一种能够处理任意距离度量的结构。Ball树通过不断划分空间并找到最小半径圆来构建,能有效应对高维数据的近邻搜索。检索时,从根节点开始向下找到包含目标点的叶子节点,并通过比较目标点与兄弟节点的距离来优化搜索。
摘要由CSDN通过智能技术生成

KD 树对于低维度 (D<20) 的近邻搜索非常快, 当 D 增长到很大时, 效率变低;这就是所谓的 “维度灾难” 的一种体现;
KD 树只能处理欧式距离;为了解决 KD 树在高维上效率低下的问题, ball 树 应运而生,同时 Ball tree 可处理一般的距离;

构建

空间中散落着很多个点.

  1. 把整个空间当作一个大簇.
  2. 找到距离最远的两个点 a 和 b , 叫做 观测点(请记住, 最后面要考) , 以它们为种子.
  3. 其余的簇内点 s 分别计算与 a 和 b 的距离, 离 a 近就归到 a 的子簇, 对 b 同理.
  4. 该找圆心和半径了, 这涉及另一个问题: 给一堆点, 怎么找到最小半径和圆心?最小圆覆盖问题算法
    用它解出的圆不会超出父类圆的范围, 如果超出了会增加不少麻烦, 因为超出部分必没有属于该簇的点, 还容易在搜索时被干扰, 增加搜索量.
  5. 上一步画好了圆, 就可以根据它们再分. 分别以两个圆重复1~4步, 直到只剩一个点, 就作为叶节点存储下来.

检索

使用ball tree时,先自上而下找到包含target的叶子结点(c, r),从此结点中找到离它最近的观测点。这个距离就是最近邻的距离的上界。检查它的兄弟结点中是否包含比这个上界更小的观测点。
方法是:如果目标点距离兄弟结点的圆心的距离 > 兄弟节点所在的圆半径 + 前面的上界的值,则这个兄弟结点不可能包含所要的观测点。否则,检查这个兄弟结点是否包含符合条件的观测点。

参考:
https://blog.csdn.net/qq_39006282/article/details/103290737

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值