Ball-tree球树的原理、构建和查询

机器学习课程第二次作业Part2——利用ball-tree实现knn算法

网络上关于ball-tree的资料较少,我参阅了一些文献之后,记录一下自己对ball-tree的理解

简介

球树是一颗二叉树,每个结点代表了一些点的集合,记作Points(Node)。对于给定的数据集,球树的根节点代表了数据集中的所有样本点。球树中的一个结点可能是叶节点或者非叶节点。叶节点包含了该节点代表的样本点,非叶节点有两个孩子结点,分别记作Node.child1和Node.child2。满足以下条件:

每个结点其实就是一个空间,包含了若干个样本点,每个空间内有一个独一无二的中心点,这个中心点可能是样本点中的某一个,也可能是该空间的质心。每个结点记录了它所包含的所有样本点到中心点的最大距离,记作这个节点的半径:
在这里插入图片描述

建立

以二维为例
选择一个距离当前中心点最远的观测点p1,和距离p1最远的观测点 p2,将圆中所有样本点按距离都分别归于p1或p2,然后计算p1和p2的中心点和半径。递归建立球树。

你可能感兴趣的:(ball-tree,机器学习)