《统计学习方法》第三章中的算法3.2与算法3.3
实现KD树的构造级最邻近点搜索
算法3.2:
构造KD树
输入:空间数据集T
输出:KD树
Python代码:
def creat_ketree(data,depth=0):
"""
创建KD树
axis为坐标轴
num为中位数节点
depth为树的深度
median为父节点
left,right分别为左右孩子节点
:param data:
:param depth:
:return:
"""
try:
m = len(data[0])
except IndexError as e:
return None
tree_node = {}
axis = depth % m
depth += 1
tree_node['split'] = axis
data = sorted(data,key = lambda data : data[axis])
num = len(data)
tree_node['median'] = data[num]
tree_node['left'] = creat_ketree(data[:num] , depth)
tree_node['right'] = creat_ketree(data[num+1:] , depth)
return tree_node