论文概述(KNN算法)
论文概述
论文题目:k-NearestNeighbors on Road Networks: A Journey in Experimentation and In-MemoryImplementation
一、主要内容
目前关于KNN问题的高效算法主要有IncrementalNetwork Expansion (INE)算法,Incremental Euclidean Restriction(IER)算法,Distance Browsing算法,Route Overlay and Association Directory(ROAD)算法以及G-tree算法。该论文对这些算法进行了详尽的实验评估和比较,并展示了大量的实验结果和对比图表,做出了卓有成效的工作。
已有的KNN算法根据其基于的索引分为混合索引和分离索引两大类。基于混合索引的算法创造了一个单独的索引来存储对象和道路网络。例如,著名的VN3算法使用了基于一些对象集合的泰森多边形图来划分道路网络;相反的,分离的索引技术使用两个单独的索引来设置对象和道路网络,而后者更具有实际意义并且拥有更多的优点。首先,一个现实生活中的KNN查询常常被应用到多个对象集合,例如,查询最近的k个餐厅或者停车位。在解决这类问题时,混合索引必须重复索引每种类型的对象,这将会导致巨大的空间开销和预处理时间开销。其次,对于一个对象集合的任何变化,混合索引必须更新整个索引并重新处理整个道路网络,而分离索引只需要更改对象的索引即可。分离索引的这个优势在询问频繁更新的对象时更加显著,比如询问对象是此刻可使用的停车位。所以该论文使用的KNN算法是基于分离式索引的,包括了Incremental Network Expansion (INE)算法,Incremental Euclidean Restriction(IER) 算法,Distance Browsing 算法,Route Overlay and AssociationDirectory (ROAD)算法以及 G-tree 算法。此外,为了应对智能手机激增的使用量和相应的基于地图的服务的广泛使用,KNN算法的实践必须使用基于内存的快速查询处理,以满足巨大的查询工作负担。所以该论文主要研究内存上KNN算法的实践效率。
3.1 Incremental Network Expansion
3.2 Incremental Euclidean Restriction
Incremental Euclidean Restriction (IER) 采用欧氏距离作为启发式搜索,随着检索过程不断减小目标集合O中候选者的范围。首先,IER使用诸如R-tree的数据结构来检索欧式距离描述下的KNN问题,然后估算这k个对象的欧式距离并按距离从近到远将他们排序。现在这k个元素的集合成为KNN查询的候选集合,集合中距离q最远的顶点到q的距离(表示为Dk)变成了最终KNN查询集合的最远距离的一个上界。之后,IER遍历接下来在欧氏距离中距离顶点q最近的顶点p,如果p到q的欧式距离dE(q, p) ≥ Dk,则p不可能成为一个更优解,此时搜索便可以结束了,因为不存在更优秀的解了。否则,将p加入KNN查询集合的候选者集合中,并将原来候选者中距离q最远的点从集合中删除,并更新DK,然后继续该算法直到算法终止或发现不存在下一个最近的顶点。
3.3 Distance Browsing
Distance Browsing(DisBrw)使用Spatially Induced Linkage Cognizance (SILC)索引法解决KNN查询。DisBraw算法拥有较少的优先队列插入操作,因而有更高的效率。
首先介绍SILC索引。对于一个顶点s ∈ V , SILC预处理出s到其他所有节点的最短路径,接着分配给每个与s相邻的节点v不同的颜色,然后分配给每个顶点u ∈ V与v相同的颜色,满足v在从s到u的最短路径上(如图1-1,图中s=v6)。
SILC索引将道路网络划分成了一些四元树,对于包含在四元树区域b中每个顶点v,我们需要计算s到v的欧式距离和最短路上距离的比值,然后存储b中最小和最大的比值λ−和 λ+。现在,任意给一个顶点t,通过将t所在区域的λ−,λ+和s到t的欧式距离相乘计算出一个区间[δ−, δ+]。这个区间可以用来淘汰不在KNN中的对象,同时,在扩展KNN下一个节点时,这个区间将不断被缩小,直到KNN算法结束或汇聚成一个足够精确的距离。
图1-1 SILC:基于v6的四元树染色图
3.4 Route Overlay & Association Directory
INE的搜索空间可能十分的巨大,而RouteOverlay and Association Directory (ROAD)算法通过排除不包含目标区域的搜索剪枝对INE进行了优化。
一个冗余网络子系统(rnet)包是道路网络G=(V, E)的一个划分,对于图中的每一条边都至少属于某个冗余网络子系统。冗余网络子系统的划分可以通过递归来完成,通过将道路网络划分为f>1个子系统,接着将f个子系统递归划分为若干个更小的系统来完成道路网络的划分。设原始的图层次为0,没划分一次层次增加1,若干次划分后道路网络被分为多个区域,区域之间的距离被特别标记,当确定某个区域内的所有顶点都不属于KNN查询的解时,可以通过只调用区域间的边来避免重复搜索排除掉的区域内的点,从而提升搜索效率。图1-2展示了图的一种划分。
图1-2 ROAD
3.5 G-tree
G-tree同样采用了图的划分来构造一种树的索引,从而通过子图层次来高效计算道路网络之间的距离。这种划分和ROAD中的划分相似,通过递归按层次不断划分。与ROAD划分不同的是,G-tree的每次划分,每个点都属于不同的区域,不存在交叉。图1-3展示了G-tree的一种划分。
在搜索扩展上,G-tree和ROAD也很相似,都是从高层次依次计算到低层次从而避免距离的重复计算,不同的是,G-tree的层次结构建立在一颗平稳的G-tree上,效率更稳定。G-tree还有一种聚合最短路径的方法,超出了该论文内容,不再叙述。
在计算KNN查询时,G-tree的优势在于建立了一个事件列表,存储G-tree的一些节点并支持动态修改,保证该列表实时更新。针对具有相同目标顶点集合O的KNN查询,G-tree避免了大量的重复计算,效率更高。
图1-3 G-tree
四、算法分析
1.Incremental Network Expansion
Incremental Network Expansion(INE)采用了Dijkstra算法中的贪心思想,通过不断询问与节点q最近的节点来扩展答案。INE算法的优点是思路清晰,实现简单。但同时该算法的缺点也很明显,那就是它需要访问所有靠近顶点q的顶点,这些节点的数量可能远大于k,而且被访问的许多节点本身可能距离q很远,完全没有必要被访问。另外,对于大规模数据,该算法时空复杂度也较高。采用优先队列存储其他顶点到q距离时,该算法时间复杂度可以达到O(|W|log|V|),其中W为图中边的数量,V为图中顶点的数量。
2.Incremental Euclidean Restriction
Incremental Euclidean Restriction (IER) 算法的编程复杂度要高于INE,而且需要借助R-tree之类的数据结构来进行预处理。优点在于避免了冗余节点的访问,特别是距离q很远的节点几乎不会被访问,很具有实际意义。缺点是极端情况下仍然需要访问所有节点,最差的时间空间复杂度不亚于INR算法。
3.Distance Browsing
Distance Browsing(DisBrw)算法利用SILC索引减少了大量的优先队列插入操作,因而有更高的效率。其中SILC索引对图的区域划分和层次划分很具有启发意义。该算法需要O(|V|1.5)的时间复杂度对节点染色,O(|V|2log|V|)的时间复杂度处理出每一对最短路,其中,v为顶点数量。在实际应用中,效率往往高于前两种算法。
4.Route Overlay & Association Directory
Route Overlay and Association Directory (ROAD)算法通过划分冗余网络子系统和排除无效子系统的搜索剪枝优化了INE算法巨大的搜索空间,时空效率比INE有了明显的提升。
ROAD算法利用捷径的概念避免了INE中大量没有必要的搜索,在一般情况下,ROAD算法具有良好的平均时空复杂度,但是ROAD算法的效率依赖于图划分的优劣,也具有一定的不稳定性。
5.G-tree
G-tree算法提供了一种新的图区域划分和层次划分方法,并就图的层次结构建立了一颗平稳的G-tree树,拥有稳定而高效的时间复杂度,同时该树空间复杂度也很稳定,为O(|V|log|V|),其中V为顶点数量。需要注意的是,G-tree的时间效率与其距离矩阵的实现方式密切相关,针对不同规模和分布的数据使用不同的哈希表拥有不同的效率,同时实验证明阵列实现比哈希表实现要快一个数量级。
五、算法实例
1.实际问题
在手机地图应用中求距离小明最近的k个餐厅。
2.应用算法
解决KNN查询的经典算法:Incremental Network Expansion(INE)算法。
3. 算法流程
3.1 输入:手机地图中重要地标的位置,道路信息,小明的位置以及餐厅的位置;
3.2 预处理:将地标转化为图的顶点,道路信息转化为图的边,地图信息处理成一个无向连通图G =(V,E),餐厅位置处理成目标点集O,小明的位置处理成初始顶点q;
3.3 分别计算与q相邻的点到q的距离,取距离q点最近的点v,加入KNN查询集合A;
3.4 若集合A中元素数量达到k个,或者图中所有节点都被处理过,算法结束,集合A即算法的解;否则,遍历与v相连的节点w,如果d(q,v)+ d(v,w)< d(q,w),则更新d(q,w)= d(q,v)+ d(v,w),然后重复步骤3.3。其中,d(x , y)为顶点x到顶点y的最短距离。
论文概述(KNN算法)相关推荐
- 机器学习的练功方式(四)——KNN算法
文章目录 致谢 致歉 4 KNN算法 4.1 sklearn转换器和估计器 4.1.1 转换器 4.1.2 估计器 4.2 KNN算法 4.2.1 概述 4.2.2 电影类型分析 4.2.3 算法实现 ...
- 计算机视觉--KNN算法和稠密SIFT实现图像识别(手势识别)
KNN算法 一.KNN算法概述 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依 ...
- 计算机视觉——KNN算法以及手势识别应用
文章目录 概述 KNN算法原理 KNN二维分类器模型 DSIFT 手势识别应用 手势识别具体流程 概述 本文介绍了KNN算法的基本原理,以及配合dfift(稠密sift)进行一个手势识别方面的应用 K ...
- 用Python+ChatGPT批量生成论文概述
用Python+ChatGPT批量生成论文概述 做算法研究离不开阅读大量论文.从海量论文中找到需要的论文往往耗费算法团队不少的精力. ChatGPT官方例子中有一个"TL;DR"摘 ...
- KNN算法原理及实现
KNN算法原理及实现 1.KNN算法概述 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类 ...
- KNN算法实现,(鸢尾花数据集分类)
KNN算法实现实例 KNN算法 一,KNN算法概述 二,算法步骤 KNN算法的具体实现 一.数据获取 二.具体代码的实现 参考博客 KNN算法 一,KNN算法概述 knn算法,又叫k-近邻算法.属于一 ...
- 机器学习—KNN算法
文章目录 一.K近邻算法概述 二.K近邻三要素 距离度量 k值选择 分类决策规程 代码 一.K近邻算法概述 KNN算法属于我们监督学习里面一种分类算法,避开那些文邹邹的话语,用幼稚园的话来说,就是依据 ...
- 第1关:knn算法概述
*任务描述 本关任务:使用python实现方法,找出目标样本最近的k个样本. 相关知识 为了完成本关任务,你需要掌握:1.knn算法思想,2.距离度量. knn算法思想 k-近邻(k-nearest ...
- 邻近算法(KNN算法)
邻近算法 锁定 本词条由"科普中国"百科科学词条编写与应用工作项目 审核 . 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简 ...
最新文章
- 2007.04.26
- python代码判断指定日期是当前年的第多少天
- MySQL笔记2: count() 函数和 sum() 函数用法和区别
- 160 - 23 Chafe.1
- tmpfs 文件系统介绍
- pycocotools/_mask.c:no such file or directory
- 初级软考程序员不会c语言,初级程序员考试就这么简单
- 【第七篇】Flowable核心内容之任务分配
- [五]基础数据类型之Short详解
- L1-087 机工士姆斯塔迪奥 - java
- NoSQL 一致性[详解]更新一致性
- 计算机网络人工智能论文,浅析计算机网络中人工智能的应用论文
- 【数据库查询--计算机、电脑系列】--查询价格最高的打印机型号。
- 报错Unknown custom element: <组件名> - did you register the component correctly?的原因及解决办法
- 透明加密软件如何实现数据加密?
- 幼师学计算机心得体会怎么写,幼儿教师理论学习心得多篇
- 今日头条付费专栏的暴利赚钱模式,半年净赚40万!
- 内网安全解决方案经验谈
- 车载仪表android方案,基于NXP iMX8QM 汽车仪表+车载娱乐双作业系统解决方案
- 通达信破解接口主要连接哪两个端口?
热门文章
- 什么是分布式_什么是分布式存储?分布式存储有什么优势?
- 江苏计算机信息录入技师选拔考试题,江苏省机关事业单位人技师资格选拔考试试卷.doc...
- 皕杰报表填报过程留痕
- 【Python】python安装步骤
- Codeforces Parking Lot
- PHPStorm配置PHP调试环境,xdebug调试原理
- 华为ac配置radius认证服务器_华为AC如何实现外部portal认证
- 第五届蓝桥杯国赛C++B组 Log大侠
- node.js sream II
- 经验 | 快速导出某文件夹下文件名称