面试算法/ml理论 -- 最近邻搜索 KD树

本文详细介绍了最近邻搜索的重要性以及KD树在解决此类问题中的应用。通过KD树的构建、插入和查询优化(BBF算法)的讲解,阐述了如何利用KD树在低维空间中提高搜索效率,同时指出在高维数据集上,BBF算法能提供近似的最近邻搜索。
摘要由CSDN通过智能技术生成

面试官考查的最近邻搜索,不仅属于机器学习基础理论KNN的范畴,并且在实际工作比如 召回ANN 检索中也经常用到,如果小明当初能早些看到并行世界中我总结的这个图谱,肯定会有不一样的结果。

这次我们就先来总结下 最近邻算法(NN)中的KD树的相关知识点。

问题的产生

最近邻搜索(Nearest Neighbor Search)是指在一个确定的距离度量和一个搜索空间内寻找与给定查询项距离最小的元素。暴力搜索的解法时间复杂度是O(n), 使用KD-tree 能降低时间复杂度。

由于维数灾难,我们很难在高维欧式空间中以较小的代价找到精确的最近邻。近似最近邻搜索(Approximate Nearest Neighbor Search)则是一种通过牺牲精度来换取时间和空间的方式从大量样本中获取最近邻的方法。

KD-tree

KD-tree 是K-dimension tree的缩写,是对数据点在k维空间中划分的一种数据结构。

本质上,k-d树是一种空间划分树,是一种平衡二叉树。将整个k维的向量空间不断的二分,从而划分为若干局部空间,然后搜索的时候,不断进行分支判断,选择其中的局部子空间,避免了全局空间搜索。

举个例子,当k=3 的时间,KD-tree 就会将三维空间分割成如下图的形式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值