kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别( 二 )


query point(查询点)所需的近邻数k。Brute force 查询时间几乎不受k值的影响.Ball treeKD 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树在搜索路径优化时使用的是两点之间的距离来判断,而球树使用的是两边之和与第三边大小来判断,即 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别

以下图为例搜索点 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
的半径为 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
内的最近邻,即满足 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别

1. 从根节点 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
开始从上至下递归遍历每个可能包含最终近邻的子空间 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别

2. 如果子空间的半径 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
之和小于 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
中心点 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
到目标点 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
的距离,即 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
,接着在满足这样条件的子空间样本点内递归搜索满足 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
的点就是我们想要的最近邻点了。换句简单的话来说,对于目标空间 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
,所有被该超球体截断的子超球体内的所有子空间都将被遍历搜索。
3. 由于子超球体 【kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别】 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
所截,而对于 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
内的子空间, kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
又被 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别
所截,所以接下来就会在 kNN里面的两种优化的数据结构:kd-tree和ball-tree,在算法实现原理上有啥区别


推荐阅读