终于,「最近邻搜索」有通用方法了
作者:Kevin Hartnett
编译:Bing
如果你打算开一家咖啡馆,你一定想知道:“附近最近的一家咖啡馆在哪?”了解这些信息有助于应对商业竞争。
这种现象是计算机科学中广泛研究的问题,称为“最近邻搜索”。它的问题是,给定数据集和新的数据点,数据集中哪个数据离新数据点最近?这个问题出现的场景非常丰富,可以是基因搜索、图像查询,或者音乐推荐。
但是最近邻问题并不像咖啡馆那么容易解决。过去几十年,很多计算机科学家都在致力于寻找更好的解决办法。与此同时,他们还要解决随之而来的复杂情况,例如不同数据集对“相近”有着不同的定义。
现在,一个五人小组提出了开创性的解决办法,他们在两篇论文中(一篇已于4月发表,另一篇还未出炉)提出了解决复杂数据最近邻问题的通用方法。
麻省理工学院的计算机科学家、最近邻搜索领域的重要任务Piotr Indyk表示:“这是首个用单一算法捕捉大量空间的结果。”
不同的距离
我们已经习惯了用一种方法定义距离,常常会忽视其他方式。通常,我们用“欧几里得距离”测量距离,即在两点之间测量直线的距离。但在有些情况下,这样的测量方式就说不通了。例如在街道网格中,就需要用到曼哈顿距离了,直线距离5英里的目的地,可能需要走3英里之后转90°,再继续走4英里才能到达。
另外,还可以用非地理的术语表示距离。比如Facebook上的两名用户、两部电影、两组基因之间的距离怎么计算?在这些问题上,“距离”表示的是两个物体之间的相似程度。
有关距离的测量尺度有很多,例如两组基因,生物学家会用“编辑距离(edit distance)”来比较二者。这样一来,两组基因序列之间的距离就是从一组基因转换到另一组所需要添加、删除、插入、替换的数字。
编辑距离和欧几里得距离是两种完全不同的距离测量方法,二者是不能相互替代的。但是这样的情况对研究最近邻算法的科学家们来说很棘手,能有效计算一种距离的算法在另一种情况下就无法工作了。
在夹缝中求生存
为了找到最近邻,标准方法是将数据分成好几份。假设你的数据就像在牧场中吃草的奶牛,给分散在草场中的牛群画不同的圆圈,现在进来了一头新奶牛,问它会落在哪个圆圈里?可以肯定的是,这头新奶牛的最近邻一定也在这个圈里。
然后重复这一过程,不断进行细分。最终会得到一个只包含两头牛的区域,这样就找到了最近邻。
现在,算法能够完成这一过程,好的算法还会将这一任务完成得又快又好。这里“好”的标准可以理解成,算法不会得出最近邻与新数据不在一个圈子里的结果。
近些年来,科学家们提出了多种分割数据的算法。对于低维数据(即每个数据点仅由少量的值定义,例如牧场中牛的位置),算法在解决最近邻问题时会生成Voronoi图。
对于高维数据(每个数据点可能有成百上千个值),Voronoi图要计算起来就十分费力了。所以科学家们用“局部敏感哈希(LSH)算法”对数据进行分割,这种算法于1998年由Indyk和Rajeev Motwani共同提出。LSH算法是随机对数据进行分类的,这使得它速度很快,但精确度较低。算法最终并不是找到确切的最近邻点,而是告诉你最近邻与已有数据的确切距离。(可以想象成在电影推荐时,推荐结果并不是最佳的,而是那些还不错的。)
上世纪90年代末,计算机科学家们提出的LSH算法以特殊的距离尺度对最近邻问题给出大致的解决方案。这些LSH算法都非常具体,无法通用。
“你可以为欧几里得距离或曼哈顿距离设计非常高效的算法。但是我们没有一种技术能在多种距离上通用,”Indyk说道。
受制于这种困境,科学家们想了一种应变方法:通过嵌入,在没有好的算法的距离标准之上“覆盖”一种距离尺度。但是这样的结果往往不准确,有的时候嵌入根本无法完成。所以他们仍需要想出一种合适的通用方法。
惊人的结果
在这项新研究开始之际,科学家们回过头思考当初具体的最近邻算法追求的目标是什么。他们提出了一个更宽泛的问题:对距离尺度来说,阻碍一款好的最近邻算法出现的原因是什么?
他们想原因可能与在寻找最近邻时复杂的“扩展图(expander graph)”有关。扩展图是一群由线条连接起来的点。这些图都有它们自己的距离尺度,图中两点之间的距离是你从一点到另一点所经过的最少线段。可以将其想象成社交网络中的各种人脉关系。
扩展图有两个明显矛盾的特点:它联系广泛,所以如果想切断与某一点的联系,就要切断之间的线段。但同时,大多数点都和其他的点相连。所以,最终有些点会越来越远。
这样的特征造成的结果是,在扩展图上可以很快地进行最近邻搜索,而将数据点分割的过程可以看成将最近的两点分开。
“任何分割扩展图的方法都会切断很多线,分开很多相近的点,”论文作者之一Waingarten说道。
从左至右:Alexandr Andoni、Ilya Razenshteyn、Erik Waingarten
2016年夏天,Andoni、Nikolov、Razenshteyn和Waingarten认为,是不可能存在对最近邻算法有效的扩展图的。但他们真正想证明的是,好的最近邻算法同样也不存在于其他距离尺度中。
他们证明的方法是在这些距离尺度中嵌入扩展尺度。这样一来,他们可以确定这些尺度有类似扩展图的无法工作的特征。
这四位科学家找到普林斯顿大学的Assaf Naor,他是一名数学家,同时也是计算机科学家,此前的研究非常适合回答有关扩展图的问题。他们询问了有关扩展图嵌入到其他距离类型中的问题,但答案并非所期望的那样,Assaf给出了完全相反的回答。
Naor证明,扩展图并不能嵌入到多种距离尺度中,研究者将这一论断作为基础,接着这个逻辑链条开始思考:如果扩展图不能嵌入到其他尺度,那么一个好的数据分割方法一定存在(因为他们证明扩展图的特征是阻碍良好数据分割的障碍)。因此,良好最近邻算法可能存在。
他们将发现结果写在第一篇论文中,而第二篇论文本月也即将发表。Waingarten表示:“第一篇论文证明了确实存在一种方法能良好地进行数据分割,但没有给出如何快速完成的方案。在第二篇论文中会详细解释。”
同时,这项新研究第一次用通用的方法对高维数据进行最近邻搜索。“任何尺度空间都可以用该算法实现最近邻搜索,”Waingarten说。
转载于:https://blog.51cto.com/yixianwei/2160504
相关文章:

tar自动打包指定文件夹中的文件到指定目录
这是我离开上一家公司,到XX人寿保险公司的第一个工作内容,很简单,可以减少每天重复的工作量。写一个脚本,将指定文件夹下的所有文件打包成以日期命名的格式并存放到其父目录中,自动检测该压缩包,保留时间为…

【SQL】sql语句GROUP BY
1、语法 SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name;2、说明 先对数据集分组,再根据规则批量处理每组数据。 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将…

色情低俗、暴力恐怖内容...如何用AI“一网打尽”?
作者 | Rachel、Just出品 | AI科技大本营(ID:rgznai100)移动互联网时代催生了大量的多媒体数据,每天在社交平台、长短视频、直播平台、新闻资讯等内容平台产生了数以亿计的图片和视频,这些数据的内容审核面临严峻的挑战。人工审核…

想要学好Go语言的必须知道的一个小技巧
2019独角兽企业重金招聘Python工程师标准>>> 由于我转Go语言比较早,很多认识我的,转Go或学习Go的同学遇到问题,经常会过来问我,然后,我发现。 除了学习Go语言可以看那些资料,这个问题以外&#…

【CSS3教程】CSS3基础常用技巧实例集合
为什么80%的码农都做不了架构师?>>> CSS3常用技巧 CSS3下条纹&方格斜纹背景的实现 一、效果抢先:CSS3下的条纹背景demo 这些美丽的纹饰全部都是由CSS实现的,没有一点点的图片。 二、原理简述 主要是应用了两个CSS3的属性&…

【FFmpeg】ffmpeg工具源码分析(二):转码核心函数 transcode
1、转码流程 1)转码前初始化:打开输入输出文件,初始化编码器、解码器、过滤器,创建多线程,设置串口终端等; 2)while循环处理每一包数据,核心函数 transcode_step(稍后分析); 3)转码结束前收尾工作:关闭多线程,刷新编解码缓冲区,恢复串口终端设置,向输出文件写…

在CentOS7上部署Apache Mesos
概述 Apache Mesos是一款基于多资源(内存、磁盘、CPU、端口等)调度的开源集群管理套件,能使容错和分布式系统更加容易。 工作原理 Apache Mesos采用了Master/Slave结构来简化设计,将Master做得尽可能轻量级,仅保存了各…

CTA核心技术及应用峰会开幕!(附第二日参会攻略)
全球智能化趋势当前,人工智能技术正蓬勃发展。为了直击开发者在机器学习与人工智能技术研究与落地过程中的痛点与瓶颈,深入解析机器学习和知识图谱技术在行业中的实践和落地。2019 年 5 月 26 - 27 日,由中国 IT 社区 CSDN 与数字经济人才发展…

Sharepoint学习笔记—ECMAScript对象模型系列-- 8、组与用户操作(一)
这里总结一下关于使用ECMAscript对象模型来操作Goup与User的常用情况,因为内容较多,所以拆分为两个部分,这部分主要内容如下: 1、取得当前Sharepoint网站所有的Group 2、获取当前登录用户的Title与所属Group 3、获取指定Group下的…

【FFmpeg】ffmpeg工具源码分析(三):分配过滤器内存(宏GROW_ARRAY)详解
0、引言 在ffmpeg.c源码的核心函数transcode() 中,先执行初始化操作transcode_init() ; 首先初始化过滤器filtergraphs,在寻找过滤器在哪分配时,发现它使用宏GROW_ARRAY以增长的方式来分配内存。 1、GROW_ARRAY原型 #define GROW_ARRAY(array, nb_elems)\array = grow_a…

技术引路:机器学习仍大有可为,但方向在哪里?
整理 | CTA 直播小分队出品 | AI科技大本营(id:rgznai100)杭州国际博览中心,这里曾经是二十国集团领导人第十一次峰会的主场馆,5 月 26 日 CTA 核心技术与应用峰会(杭州)同样在这里正式召开&…

基于GTID模式MySQL主从复制
基于GTID模式MySQL主从复制 GTID复制原理:基于GTID的复制是MySQL 5.6后新增的复制方式GTID (global transaction identifier) 即全局事务ID, 保证了在每个在主库上提交的事务在集群中有一个唯一的ID.在原来基于日志的复制中, 从库需要告知主库要从哪个偏移量positio…

NET Framework 2.0中的数据访问新特性
1异步数据访问 a)支持异步数据编程 b)SqlConnection – BeginOpen – EndOpen c)SqlCommand – BeginExecuteNonQuery – BeginExecuteReader – BeginExecuteXmlReader – EndExecuteNonQuery – EndEx…

【网络】通讯名词解释:带宽、速率、波特率、奈奎斯特定律、香农定理
1、带宽 1.1 解释一 带宽,又叫频宽,是数据的传输能力,指单位时间内能够传输的比特数。高带宽意味着高能力。 数字设备中带宽用bps(b/s)表示,即每秒最高可以传输的位数。 模拟设备中带宽用Hz表示,即每秒传送的信号周期…

这可能是最全的机器学习工具手册!
作者 | 红色石头转载自 AI有道(ID:redstonewill)工欲善其事必先利其器!之前我也断断续续给大家发文整理过一些关于数据科学,尤其是机器学习、深度学方面的速查手册!但是,每次分享的都比较是针对某一块的内容…

保持分布式团队同步
分布式团队最大的挑战是沟通,这对建立协作的基本原则必不可少。调整工作时间,互相适应,而团队联络员有助于沟通和同步工作。以信任、尊重和开明为基础的团队会鼓励组织中的人们互相帮助,培养一种使团队保持同步的文化。\\SkuVault…

Word2010开发——操作文档
参考: http://blog.csdn.net/akipeng/article/details/6534375 http://www.haogongju.net/art/19029 首先建立一个Word外接程序(Word AddIn)(家里的Vs竟然是中文版,汗!) 接着在项目中新增项&…

【驱动】ubuntu安装内核头文件
1、检查是否已经安装 使用dpkg-query命令检查是否有可用的内核头文件。 $ dpkg-query -s linux-headers-$(uname -r) 如果输出显示install ok installed说明已经安装成功 Package: linux-headers-4.15.0-142-generic Status: install ok installed2、安装内核头文件 $ sudo…

嫌Terminal终端太单调?快收下这几个有趣的改造工具!
整理 | Rachel责编 | 琥珀出品 | AI科技大本营(ID:rgznai100)【导语】Terminal(终端)是程序员常用的工具之一,常用于系统的相关配置修改。系统自带的 terminal 较为简单,很多 Github 的开源项目都尝试对终端…

关于matlab向文件写入数据的方法——留着备用
MATLAB数据采集的时候,往往需要把得到的数据保存下来。 fid fopen(文件名,‘打开方式’); 说明:fid用于存储文件句柄值,如果fid>0,这说明文件打开成功。打开方式有如下选择: ‘r’ÿ…

js在页面滚动到一定位置时触发事件?
function getTop(e) {var offsete.offsetTop;if(e.offsetParent!null) //只要还有父元素,也就是当前元素不是根节点就继续往上累计元素的高度offsetgetTop(e.offsetParent);return offset; } var myBlockTop getTop(document.getElementById("homepageBanner")); va…

【C语言】学习笔记3——字符串
1. 字符串(charcacter string)是一个或多个字符的序列 2. C语言没有专门用于存储字符串的变量类型。字符串都被存储在char类型的数组种。 3. 数组由连续的存储单元组成,字符串种的字符被存储在相邻的存储单元中, 每个单元存储一个…

Facebook 的AI翻身之战!
作者 | Michael K. Spencer译者 | 王艳妮,责编 | 屠敏出品 | CSDN(ID:CSDNnews)Facebook最近举办了F8会议,这是了解这个平台未来发展的绝佳机会。 F8是Facebook的年度开发者大会——一个为期数日的活动,期间…

【Linux驱动】ThinkPad笔记本wifi模块rtl8821ce在ubuntu16.04的驱动(默认没有)
0、wifi模块型号 在win10下设备管理器中查看,型号为:Realtek 8821CE Wireless LAN 802.11ac PCI-E NIC 1、问题描述 在ThinkPad上安装win10ubuntu16.04双系统后,在win10下wifi可以正常使用,但是在ubuntu下没有wifi列表。 2、…

关于Linux的inode和dentry的一组文章
先mark一下,有时间再看。 http://www.ruanyifeng.com/blog/2011/12/inode.htmlhttp://teaching.idallen.com/dat2330/04f/notes/links_and_inodes.htmlhttp://www.thegeekstuff.com/2012/01/linux-inodes/http://blog.chinaunix.net/uid/7828352/frmd/-1.htmlhttp:/…

为什么Rust连续4年获“最受喜爱编程语言”?
作者 | Mike Tang责编 | Aholiab出品 | 区块链大本营(blockchain_camp)2015年5月15日,Rust编程语言核心团队正式宣布发布Rust 1.0版本。4年来,它优雅的解决高并发和高安全性系统问题的能力,受到了越来越多开发者的喜爱。并且连续4…

【Windows】清除win10开始菜单中失效打程序标签
1、问题描述 安装新版本Qt程序,卸载旧版本Qt后,在开始菜单中,还有残留,但是已经失效,需要删除这些失效的程序标签。 2、显示隐藏文件夹 打开此电脑——查看——勾选“隐藏项目”: 3、删除失效的程序标签…

解析equals(Object obj)和compareTo(T obj)
背景:最近在研究静态扫描的东西,遇到一个规则:"equals(Object obj)" should be overridden along with the "compareTo(T obj)" method 然后就想深度扒一扒equals和compareTo有什么区别 1.java.lang.Object是所有类的父类…

安装和部署Exchange Server 2007
为什么Exchange Server 2007使用服务器角色? 简化部署和管理 增强可扩展性 改进安全性 见下图:什么是邮箱服务器角色? 邮箱服务器角色: 存储用户邮箱和公共文件夹 通过群集, LCR, CCR实现高可用性 并不在邮箱之间转输邮件邮箱服务器: 不应该能从Internet直接访问 必须是活动…

AI时代,中国技术创新如何弯道超车?
2019 年 5 月 26 日 - 27 日,杭州国际博览中心,由工信部人才交流中心指导,CSDN 和数字经济人才发展中心主办的 CTA 核心技术及应用峰会圆满落下帷幕。本次大会聚焦机器学习、知识图谱等 AI 领域的热门技术,关注技术在行业中的实践…