按照链接里的算法写了k近邻的python实现

from math import sqrt

class KDnode:

def __init__(self, data, left, right, split):

self.left = left

self.right = right

self.split = split

self.data = data

class KDtree:

def __init__(self,data):

self.k = len(data[0])

def CreatKD(split, data_set):

if not data_set:

return None

data_set.sort(key=lambda x: x[split])

flag = len(data_set)//2

new_split = (split+1) % self.k

return KDnode(data_set[flag], CreatKD(new_split,data_set[:flag]), CreatKD(new_split, data_set[flag+1:]), split)

self.root = CreatKD(0, data)

def nearest(tree, point, k):

L = []

def dis(x,p): #x是当前节点,p是目标节点

if len(L)

d = sqrt(sum((x1-x2)**2 for x1, x2 in zip(x, p)))

L.append([x,d])

return

else:

d = sqrt(sum((x1 - x2) ** 2 for x1, x2 in zip(x, p)))

L.sort(key=lambda a: a[1])

if(L[-1][1] > d):

L.pop()

L.append([x, d])

return

def travel(kd_node):

if kd_node is None:

return

s = kd_node.split

if kd_node.data[s] > point[s]:

nearnode = kd_node.left

furthnode = kd_node.right

else:

nearnode = kd_node.right

furthnode = kd_node.left

travel(nearnode)

dis(kd_node.data, point)

dis1 = abs(kd_node.data[s] - point[s])

dis2 = sqrt(sum((x1 - x2) ** 2 for x1, x2 in zip(kd_node.data, point))) #最长距离

if len(L) < k or dis1 < dis2:

travel(furthnode)

else:

return

travel(tree.root)

return L

# data = [[2,3],[5,4],[9,6],[4,7],[8,1],[7,2]]

# kd = KDtree(data)

# ret = nearest(kd, [3,4.5], 2)

# print(ret)

from time import clock

from random import random

# 产生一个k维随机向量,每维分量值在0~1之间

def random_point(k):

return [random() for _ in range(k)]

# 产生n个k维随机向量

def random_points(k, n):

return [random_point(k) for _ in range(n)]

N = 400000

t0 = clock()

kd2 = KDtree(random_points(3, N)) # 构建包含四十万个3维空间样本点的kd树

t1= clock()

print("time: ", t1-t0, "s")

ret2 = nearest(kd2, [0.1,0.5,0.8], 2) # 四十万个样本点中寻找离目标最近的点

t2 = clock()

print("time: ", t2-t1, "s")

print(ret2)

运行结果如下:

标签:node,return,kd,python,近邻,split,data,self

来源: https://blog.csdn.net/surserrr/article/details/98884472

kd树 python实现_kd树 寻找k近邻算法 python实现相关推荐

  1. 距离产生美?k近邻算法python实现

    https://blog.csdn.net/red_stone1/article/details/80607960 1. 什么是k近邻算法? k最近邻(k-Nearest Neighbor,kNN)分 ...

  2. 通过交叉验证寻找K近邻算法的最优K值

    问题引出 之前我们使用K近邻算法尝试寻找用户年龄与预估薪资之间的某种相关性,以及他们是否有购买SUV的决定.主要代码如下: from sklearn.neighbors import KNeighbo ...

  3. knn K近邻算法python实现

    本文主要内容: knn K近邻算法原理 sklearn knn的使用,以及cross validation交叉验证 numpy 实现knn knn改进方法 1 knn K近邻算法原理 K近邻算法:给定 ...

  4. k近邻算法python解读_Python3《机器学习实战》学习笔记(一):k-近邻算法(史诗级干货长文)...

    运行平台: Windows IDE: Sublime text3 一.简单k-近邻算法 本文将从k-近邻 1.k-近邻法简介 k近邻法(k-nearest neighbor, k-NN)是1967年由 ...

  5. python机器学习案例系列教程——K最近邻算法(KNN)、kd树

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 K最近邻简介 K最近邻属于一种估值或分类算法,他的解释很容易. 我们假设一个人的优秀成为设定为1.2.3.4.5.6.7.8.9.10 ...

  6. 基于KD树的K近邻算法(KNN)算法

    文章目录 KNN 简介 KNN 三要素 距离度量 k值的选择 分类决策规则 KNN 实现 1,构造kd树 2,搜索最近邻 3,预测 用kd树完成最近邻搜索 K近邻算法(KNN)算法,是一种基本的分类与 ...

  7. K近邻算法的kd树实现

    k近邻算法的介绍 k近邻算法是一种基本的分类和回归方法,这里只实现分类的k近邻算法. k近邻算法的输入为实例的特征向量,对应特征空间的点:输出为实例的类别,可以取多类. k近邻算法不具有显式的学习过程 ...

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

    KD树节点 /// <summary>/// KD树节点/// /2016/4/1安晟添加/// </summary>[Serializable]public class KD ...

  9. 基于kd树的k近邻算法——KNN

    1.简介 k近邻算法是机器学习中一种基本的分类与回归算法,对你没听错k近邻算法不仅可以用来做分类,还可以用于回归,英文全称为k-Nearest Neighbor简称k-NN.k近邻算法属于一种有监督学 ...

最新文章

  1. objc runtime 动态增加属性
  2. spring配置文件路径修改后web.xml配置
  3. MFC消息映射的定义
  4. php电子商务网站开源,Shopilex-中文开源网店
  5. 浙大 PAT b1036
  6. SQOOP 导出SQL SERVER中数据
  7. gg修改器偏移量修改_GG修改器偏移是怎么弄 | 手游网游页游攻略大全
  8. JAVA打卡记录计算时间
  9. 一根均线选股法_一根足以,万能均线买卖法!(实战干货)
  10. 技术分享:印制插头侧面包镍金加工工艺研究
  11. 微信支付横空出世,闲扯一番自我扫盲(转)
  12. 机场生产运行数据统计指标-第一篇-总述
  13. 锁定Mac电脑的8种方法
  14. Java中抽象类与方法的重写
  15. Windows编译FreeRDP
  16. python 八卦图
  17. Oracle中当天日期 及 七天内 日期获取
  18. 一 自学软件编程前可能你想了解的问题
  19. mysql 两张表当成一张表查询
  20. 亚马逊成人用品巨头日本Aivrobta品牌要在今年进军中国市场了

热门文章

  1. 数据挖掘10大算法(1)——PageRank
  2. Gradle项目同步失败错误
  3. java 复制一个对象_Java如何完全复制一个对象
  4. python3.6安装pip3_python3.6如何安装pip
  5. Java线程池线程突然没了_70%人答不全!线程池中的一个线程异常了会被怎么处理?...
  6. ee可以有js吗 jvaa_EE今年最后一次邀请,最低分数线468分!2021年的40万新移民指标,你准备好了吗?!...
  7. Python之路 - 网络编程之Socket
  8. 重新分析connection reset by peer, socket write error错误原因
  9. ansys 常用结构单元类型
  10. 项目管理应该注意问题