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 
发布了407 篇原创文章 · 获赞 328 · 访问量 111万+

猜你喜欢

转载自blog.csdn.net/mishifangxiangdefeng/article/details/104642090