kd树(K-dimensional tree)

1.kd-tree简介

Kd-Tree(K-dimensional tree),是一种高维索引树形数据结构,经常使用于在大规模的高维数据空间进行最近邻查找,比如图像检索和识别中的高维图像特征向量的K近邻查找与匹配(查找与所给数据最接近的k个数)。
kd树结构类似于高维的二叉树,树中存储的是一些K维数据。在一个K维数据集合上构建一棵Kd-Tree代表了对该K维数据集合构成的K维空间的一个划分。

2.kd-tree的构建

2.1如何构建高维“二叉树”

那么我们如何将高维数据按照二叉树的划分方法进行划分呢?要想完成高维数据的“二叉树”的构建,我们首先需要解决两个问题:
1.每次对子空间的划分时,如何确定在哪个维度上进行划分?

为了保证划分后每部分数据更加接近,我们需要选择距离更加分散的维度进行划分,因此我们选择方差最大的维度进行划分。

2.在某个维度上进行划分时。如何确保在这一维度上的划分得到的两个子集合的数量?

我们需要找到一个划分值pivot,在某个划分维度上,大于这个值的数据划分到右子树,小与这个值的数据划分到左子树。最直接的方法就是找到这些数据在某个维度的中位数作为划分值pivot。

2.1kd-tree的构建步骤

(1)对数据在每个维度的方差进行计算,选取方差最大的维度作为划分维度kv。
(2)计算数据在kv维度的中位数,根据中位数将数据划分为2个子集,在kv维度上,小于等于中位数的数据放入左边子集,大于中位数的数据放入右边子集。
(3)对每个子集重复(1)(2)步骤直至子集不能再划分为止。

以二维数据为例,用(2,3)(4,7)(5,4)(7,2)(8,1)(9,6)
构建kd树。第一次构建:计算两个维度方差最大的维度(x维度),选取此维度中位(5)数进行划分。<1|5>

  • 15
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值