统计学习方法——KD树最近邻搜索
李航老师书上的的算法说明没怎么看懂,看了网上的博客,悟出一套循环(建立好KD树以后的最近邻搜索),我想应该是这样的(例子是李航《统计学习算法》第三章56页;例3.3):
| 步骤 | 结点查询标记 | 栈内元素(本次循环结束后) | 最近点 | 最近距离 | 说明 | |||||||
| A | B | C | D | E | F | G | ||||||
| 初始化 | ABD | M=空 | Mdis = ∞ | 初始化:先将S所在的区域找到,将经过的各个结点依次加入栈中,将查询标记初始化为0 | ||||||||
| 循环 | AB | M=D | Mdis = dis(S,D) | 取出栈顶元素D,D被查询,更新D的标记为1,计算S与D的距离,比当前最小值小,更新M=D,Mdis = dis(S,D),计算S到D的超平面的距离是否小于Mdis(这里二维就是以S为圆心,Mdis为半径的圆是否与D那维的直线相交,在这里是相交的),小于,将D两侧的子结点加入栈,但是D两侧没有子结点,不加 | ||||||||
| A | M=D | Mdis = dis(S,D) | 取出栈顶元素B,B被查询,更新B的标记为1,计算S与B的距离,不比当前最小值小,不更新,计算S到B的超平面的距离是否小于Mdis,大于,那就只加入B的S那一侧的子结点D,子结点D已经被标记为1,已被查询,不加入 | |||||||||
| C | M=D | Mdis = dis(S,D) | 取出栈顶元素A,A被查询,更新A的标记为1,计算S与A的距离,不比当前最小值小,不更新,计算S到A的超平面的距离是否小于Mdis,小于,将A两侧的子结点加入,子结点B已经被标记为1,被查询,不加入,子结点C标记为0,加入栈 | |||||||||
| E | M=D | Mdis = dis(S,D) | 取出栈顶元素C,C被查询,更新C的标记为1,计算S与C的距离,不比当前最小值小,不更新,计算S到C的超平面的距离是否小于Mdis,大于,只加入C的S那侧的子结点E,子结点E标记为0,没被查询,加入栈 | |||||||||
| M=E | Mdis = dis(S,E) | 取出栈顶元素E,E被查询,更新E的标记为1,计算S与E的距离,比当前最小值小,更新M=E,Mdis = dis(S,D),计算S到E的超平面的距离是否小于Mdis,小于,将E两侧的子结点加入栈,但是E两侧没有子结点,不加 | ||||||||||
| M=E | Mdis = dis(S,E) | 栈空,循环结束 | ||||||||||
如果有错,还望大佬们能够指正
统计学习方法——KD树最近邻搜索的更多相关文章
- KNN算法与Kd树
最近邻法和k-近邻法 下面图片中只有三种豆,有三个豆是未知的种类,如何判定他们的种类? 提供一种思路,即:未知的豆离哪种豆最近就认为未知豆和该豆是同一种类.由此,我们引出最近邻算法的定义:为了判定未知 ...
- 从K近邻算法谈到KD树、SIFT+BBF算法
转自 http://blog.csdn.net/v_july_v/article/details/8203674 ,感谢july的辛勤劳动 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章 ...
- <转>从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
转自 http://blog.csdn.net/likika2012/article/details/39619687 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经 ...
- 统计学习方法笔记 -- KNN
K近邻法(K-nearest neighbor,k-NN),这里只讨论基于knn的分类问题,1968年由Cover和Hart提出,属于判别模型 K近邻法不具有显式的学习过程,算法比较简单,每次分类都是 ...
- 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
转载自:http://blog.csdn.net/v_july_v/article/details/8203674/ 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说: ...
- 统计学习方法与Python实现(二)——k近邻法
统计学习方法与Python实现(二)——k近邻法 iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1.定义 k近邻法假设给定一个训练数据集,其中的实例类别已定 ...
- 李航统计学习方法——算法2k近邻法
2.4.1 构造kd树 给定一个二维空间数据集,T={(2,3),(5,4),(9,6)(4,7),(8,1),(7,2)} ,构造的kd树见下图 2.4.2 kd树最近邻搜索算法 三.实现算法 下面 ...
- 一看就懂的K近邻算法(KNN),K-D树,并实现手写数字识别!
1. 什么是KNN 1.1 KNN的通俗解释 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1 ...
- 统计学习方法 | 第3章 k邻近法
第3章 k近邻法 1.近邻法是基本且简单的分类与回归方法.近邻法的基本做法是:对给定的训练实例点和输入实例点,首先确定输入实例点的个最近邻训练实例点,然后利用这个训练实例点的类的多数来预测输入实例 ...
随机推荐
- Spring Boot 使用 JAX-WS 调用 WebService 服务
除了 CXF 我们还可以使用 Spring Boot 自身默认的组件 JAX-WS 来实现 WebService 的调用. 本项目源码 github 下载 1 新建 Spring Boot Maven ...
- VUE组件 单独文件封装
https://www.cnblogs.com/SamWeb/p/6391373.html vuejs 单文件组件.vue 文件 vuejs 自定义了一种.vue文件,可以把html, css, ...
- 第二章linux网络基础设置总结!
一:查看及测试网络 (1)查看活动的网络接头命令:ifconfig (2)查看所有网络接口命令:ifconfig -a (3)查看指定的网络接口(不论该网络接口是否处于激活状态)命令:ifconfig ...
- 获取Linux系统运行情况信息
代码: #include <stdio.h> #include <unistd.h> /* usleep() */ #include <stdlib.h> #inc ...
- win10的guard占内存过高
转自:https://zhidao.baidu.com/question/1180883495203481459.html win10的guard占内存过高,
- linux 添加与修改用户归属组
参考资源:https://cnzhx.net/blog/linux-add-user-to-group/ 一:已存在的用户 1.要以root进行登录 2.打开终端 3.修改分组 usermod -a ...
- nginx 的提升多个小文件访问的性能模块
阿里开源的第三方模块下载地址:https://github.com/alibaba/nginx-http-concat 下载模块 git clone https://github.com/alibab ...
- 文件目录T位
场景: 共享目录设置T标志 可以看别人的文件,但不可以删除.修改别人的文件 除非是ROOT,目录的拥有者
- Linux内核5.4正式将华为EROFS超级文件系统合入主线
导读 近期,Linux内核5.4系列宣布全面可用,添加了许多新功能,更强的安全性和更新的驱动程序,以提供更好的硬件支持.Linux内核5.4增加对微软exFAT文件系统的支持,另外还支持内核锁定功能, ...
- 03.Scala编程实战
Scala编程实战 1. 课程目标 1.1. 目标:使用Akka实现一个简易版的spark通信框架 2. 项目概述 2.1. 需求 Hivesql----------> sel ...