kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别( 二 )
query point(查询点)所需的近邻数k。Brute force 查询时间几乎不受k值的影响.Ball tree 和 KD tree 的查询时间会随着k的增加而变慢. 这是由于两个影响: 首先, k的值越大在参数空间中搜索的部分就越大. 其次, 使用k\u0026gt;1进行树的遍历时, 需要对内部结果进行排序.当k相比N变大时, 在基于树的查询中修剪树枝的能力是减弱的. 在这种情况下, 暴力查询会更加有效.
query points(查询点)数. ball tree 和 KD Tree 都需要一个构建阶段. 在许多查询中分摊时,这种结构的成本可以忽略不计。 如果只执行少量的查询, 可是构建成本却占总成本的很大一部分. 如果仅需查询很少的点, 暴力方法会比基于树的方法更好.
■网友
正好我也在了解KNN这部分,只谈怎么构造KD树和ball 树;KD树是对依次对K维坐标轴,以中值切分构造的树,每一个节点是一个超矩形,在维数小于20时效率最高--可以参看《统计学习方法》第二章和scikit-learn中的介绍;ball tree 是为了克服KD树高维失效而发明的,其构造过程是以质心C和半径r分割样本空间,每一个节点是一个超球体。
■网友
球树的中文资料比较少,我只简单说下球树搜索最近邻的过程。
KD树在搜索路径优化时使用的是两点之间的距离来判断,而球树使用的是两边之和与第三边大小来判断,即
。
以下图为例搜索点
的半径为
内的最近邻,即满足
:
1. 从根节点
开始从上至下递归遍历每个可能包含最终近邻的子空间
。
2. 如果子空间的半径
与
之和小于
中心点
到目标点
的距离,即
,接着在满足这样条件的子空间样本点内递归搜索满足
的点就是我们想要的最近邻点了。换句简单的话来说,对于目标空间
,所有被该超球体截断的子超球体内的所有子空间都将被遍历搜索。
3. 由于子超球体 【kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别】
与
被
所截,而对于
与
内的子空间,
又被
所截,所以接下来就会在
推荐阅读
- 微博目前已经支持文本,图片,位置分享,为啥没有语音和视频呢微博的pm肯定想过这两种微博形态,但迟迟不做的原因到底是啥。是语音和视频不符合产
- 非计算机专业想要利用课余时间深入自学C++,想要找到比较体面的工作大概需要啥水平
- 孩子|最好不要超过这个时间,容易对孩子带来两种影响给小宝宝开夜灯
- 现在学it还有用吗
- 这样的情况我该咋办
- 新浪汽车出品|两种外观任君选择 艾瑞泽5 PLUS新车解析
- 趣头条|本田LIFE将于12月15日上市 两种外观造型可选
- 喃喃话车|丰田亚洲龙怎么样,级别高性价比偏低,两种人看法不同
- 网通社|标配运动套件 提供两种动力选择 新款Q7正式上市/售价68.88万起
- 贵州对于大数据有哪些方面的地域优势为啥都是贵州呢
