KD树

最近的作业需要用到KNN,简单看了一些资料,发现一篇还不错的文章,非常感谢这位博主的介绍和总结,本文主要是基于此做的一些粗略笔记:
http://blog.csdn.net/u010551621/article/details/44813299

关于KNN,思想非常简单,就是寻找离自己最近的k个点。
一种常见的用法是:做分类器。找到最近的k个点,按照少数服从多数的思想。
另一种常见用法是:构建图。

kd树的介绍

首先看一下bst

bst(二叉查找树):如果左子树上的节点存储的数值都小于根节点中存储的数值,并且右子树上的节点存储的数值都大于根节点中存储的数值,那么这样的二叉树就是一颗二叉查找树

kd数跟二叉树是类似的,区别在于,kd是对高维数据,二叉树是对一维数据。
那么kd-tree与bst不同的地方在于进行分支决策的时候,还需要选择一个维度的值进行比较

kd-tree是一种对高维空间的数据点进行划分的特殊数据结构,主要应用就是高维空间的数据查找,如:范围搜索和K近邻(knn)搜索,范围搜索就是给定查询点和距离阈值,获取在阈值范围内的所有数据点;knn搜索就是给定查询点和搜索点的数目n,查找出到搜索点最近的n个点的数目;

因为我要尽可能将相似的点放在一颗子树里面,所以kd-tree采取的思想就是计算所有数据点在每个维度上的数值的方差, 然后方差最大的维度就作为当前节点的划分维度,这样做的原理其实就是:方差越大,说明这个维度上的数据波动越大,也就说明了他们就越不可能属于同一个空间,需要在这个维度上对点进行划分,这就是kd-tree节点选择划分维度的原理.

另一个比较重要的就是当前节点的确定:

割点(也就是节点存储的数据节点)一般取在分割维度上的值为中间值的点

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值