KNN的优化算法3:Ball-tree
1. 原理:
为了改进KDtree的⼆叉树树形结构,并且沿着笛卡尔坐标进⾏划分的低效率,ball tree将在⼀系列嵌套的超球体上分割数据。也就是说:使⽤超球⾯⽽不是超矩形划分区域。虽然在构建数据结构的花费上⼤过于KDtree,但是在⾼维甚⾄很⾼维的数据上都表现的很⾼效。 dpph法
球树递归地将数据划分为由质⼼C和半径r定义的节点,使得节点中的每个点都位于由r和C定义的超球内。通过使⽤三⾓不等式来减少邻居搜索的候选点数量的。
倾慕系列
2. 构建猎狗追兔子
选择⼀个距离当前圆⼼最远的观测点i1,和距离i1最远的观测点 i2,将圆中所有离这两个点最近的观测点都赋给这两个簇的中⼼,然后计算每⼀个簇的中⼼点和包含所有其所属观测点的最⼩半径。不断递归,得到上图c的结果。 3. 查询
cd10
使⽤ball tree时,先⾃上⽽下到包含target的叶⼦结点(c, r),从此结点中到离它最近的观测点。这个距离就是最近邻的距离的上界。检查它的兄弟结点中是否包含⽐这个上界更⼩的观测点。⽅法是:如果⽬标点距离兄弟结点的圆⼼的距离 > 兄弟节点所在的圆半径 +前⾯的上界的值,则这个兄弟结点不可能包含所要的观测点。否则,检查这个兄弟结点是否包含符合条件的观测点。生化仪
e网打尽
如果:该点的最近距离上确界+兄弟节点的半径 > 该点到兄弟节点圆⼼的距离,则表明构成了三⾓形,两个圆必然相交