3-2 k近邻算法 构造平衡kd树
Posted windmissing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3-2 k近邻算法 构造平衡kd树相关的知识,希望对你有一定的参考价值。
算法:构造平衡kd树
输入:数据集T,T包含m个n维的数据
输出:kd树
第一步:构造根结点
第二步:重复划分
令当前结点的深度为depth,计算:
feature = depth % n
value = T[:, feature]的下中位数。
选择在第feature个特征上基于value将数据划分成2份。
第三步:结束
区域中没有实例时停止。
# 计算下中位数
def getDownMedian(data):
if data.shape[0] % 2 == 0:
data = np.hstack([data, np.inf])
return np.median(data)
def seperateNode(node, depth):
dataSet = node['data']
if dataSet.shape[0] == 0:
return None
feature = depth % dataSet.shape[1]
value = getDownMedian(dataSet[:, feature])
node['left'] = 'data':dataSet[dataSet[:,feature] < value, :], 'left':None, 'right':None
node['right'] = 'data':dataSet[dataSet[:,feature] > value, :], 'left':None, 'right':None
node['data'] = dataSet[dataSet[:,feature] == value, :]
seperateNode(node['left'], depth+1)
seperateNode(node['right'], depth+1)
return node
def createTree(dataSet):
root = 'data':dataSet, 'left':None, 'right':None
seperateNode(root, 0)
return root
以上是关于3-2 k近邻算法 构造平衡kd树的主要内容,如果未能解决你的问题,请参考以下文章