kd树的数据结构和二叉树类似,每个节点存有当前节点的数值,左右子树的节点,和以当前节点为根节点的子树的划分维度。
class KdNode:
def __init__(self, dim, val, left=None, right=None):
self.dim = dim
self.val = val
self.right = right
self.left = left
建kd树采用的是从m个样本的n维特征中,分别计算n个特征的取值的方差,用方差最大的第k维特征作为划分左右子树的依据。对于这个特征,选择特征
的取值的中位数
对应的样本作为划分点,对于所有第k维特征的取值小于
的样本,划入左子树,对于第k维特征的取值大于等于