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树的主要内容,如果未能解决你的问题,请参考以下文章

k近邻法

3-3 k近邻算法 用kd树的k近邻搜索

02-17 kd树

k近邻&kd树

class-k近邻算法kNN

K 近邻算法(KNN)与KD 树实现