美文网首页
kNN(构造kd树的实现)

kNN(构造kd树的实现)

作者: Gantowell | 来源:发表于2018-08-24 19:51 被阅读0次

k近邻模型


1. 三个基本要素:k值的选择,距离度量,分类决策规则

2. 算法:

3. kd树的构造



python实现

class node():
    def __init__(self, value=None, left=None, right=None, depth=None, space=None):
        self.value = value
        self.left = left
        self.right = right
        self.depth = depth
        self.space = space

    def orderTraverse(self, root):
        def queueForm(root):
            queue = []
            result = []
            if root == None: return result
            queue.append(root)
            while queue:
                newnode = queue.pop(0)
                result.append(newnode.value)
                if newnode.left!=None:
                    queue.append(newnode.left)
                if newnode.right!=None:
                    queue.append(newnode.right)
            return result
        print(queueForm(root))


class kdtree():

    def __init__(self):
        pass

      #生成树
      #depth为深度,root深度为0      
      #space为在该节点创建之前的需要划分的超矩形区域
      #curFeature为按照第几维特征来划分
      #curMedian为在此特征下的中位数index

    def generateNode(self, curNode):
        space = curNode.space
        if space.shape[0] == 1:
            curNode.value = space[0]
            return
        curFeature = curNode.depth % self.K
        curSet = curNode.space
        curSet = curSet[curSet[:,curFeature].argsort()]
        curMedian = int(curSet.shape[0]/2)
        curNode.value = curSet[curMedian]
        if curSet[curMedian+1:].shape[0] > 0:
            curNode.right = node(depth=curNode.depth + 1, space=curSet[curMedian+1:])
            self.generateNode(curNode.right)
        if curSet[0:curMedian].shape[0] > 0:
            curNode.left = node(depth=curNode.depth + 1, space=curSet[0:curMedian])
            self.generateNode(curNode.left)

      ##构造kd树:
      #root为根
    def constructTree(self, trainset):
        self.K = trainset.shape[1]
        self.root = node(depth=0, space=trainset)
        self.generateNode(self.root)

    def visualize(self):
        self.root.orderTraverse(self.root)

if __name__ == "__main__":
    trainset = [[2,3],[5,4],[9,6],[4,7],[8,1],[7,2]]
    trainset = np.array(trainset)
    mytree  = kdtree()
    mytree.constructTree(trainset)
    mytree.visualize()






相关文章

  • kNN(构造kd树的实现)

    k近邻模型 1. 三个基本要素:k值的选择,距离度量,分类决策规则 2. 算法: 3. kd树的构造 python实现

  • KNN 代码

    1、knn简单实现 2、knn回归 3、搜索优化KD树

  • KNN近邻算法总结

    目录 一、KNN近邻算法思想 二、KNN模型三大要素 三、KNN算法实现步骤 四、KNN算法的KD树实现 五、总结...

  • KNN的实现:kd树(python)

    在寻找输入样本的k个近邻的时候,若进行线性扫描,对于大数据集来说耗时太久,为了加快搜索速度,提出了用kd树实现k个...

  • knn,kd树

    一只兔子帮你理解 kNNhttps://www.joinquant.com/view/community/deta...

  • 构造kd树

    实现k近邻法时,主要考虑的问题是如何对训练数据进行快速的k近邻搜索,这点在特征空间的维数大及训练数据容量大时尤其重...

  • 基于kd树的KNN算法的实现

    记得大三初期,刚从大连理工大学回来,眼巴巴的望着同学各自都有着落了,就我一副“初出茅庐,不谙世事”的样子,于是不得...

  • BAT机器学习面试1000题系列(第21~30题)

    21.KNN中的K如何选取的?关于什么是KNN,可以查看此文:《从K近邻算法、距离度量谈到KD树、SIFT+BBF...

  • KD 树上的 KNN 算法

    kd树knn算法 给定kd树,求距离p点最近的k个样本。零、L为有k个空位的列表(一)、根据p的坐标值和每个节点的...

  • 机器学习实战笔记-KNN(k近邻法)篇

    本文是作者学习机器学习KNN的学习记录与笔记,文章会从简介、kd树算法、代码实现等几个方面展开。本文的目的是为了记...

网友评论

      本文标题:kNN(构造kd树的实现)

      本文链接:https://www.haomeiwen.com/subject/iuqiiftx.html