作者: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

终于,「最近邻搜索」有通用方法了相关推荐

  1. 新功能又来啦!这次是「代码搜索」和视频直播!

    不知不觉又到周五,菌菌又带着新功能来啦! 代码搜索功能发布,提升开发效率 开发一个项目,配置参数是必不可少的步骤,而项目规模越大需要配置的参数就越多.怎么样?是不是已经开始头疼了?dengdengde ...

  2. 说了那么多,到底什么是「神经搜索」?

    从人脑神经网络到深度学习神经网络,来自 Jina AI 的 Jack 将带大家从 0 到 1 认识「搜索」及「神经搜索」. 什么是神经搜索?它与普通搜索有什么区别?它能解决哪些问题?又有哪些优势和劣势 ...

  3. 华为搜索引擎面世:用不了谷歌,试试「花瓣搜索」?

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 转自:机器之心 参与:泽南.杜伟.小舟 为了解决没有「谷歌全家桶」的问题,华为今年接连推出了 ...

  4. 721合约 erc eth_深入了解「智能合约」及主流平台「智能合约」的查询方法

    智能合约(Smart Contract)指的是由计算机处理的可执行合约条款的交易协议,智能合约会严格遵循合约约定,自动执行.借助于区块链公开透明.不可逆.不可篡改.可追溯等特点,智能合约得以在区块链技 ...

  5. 「详解」imgaug 图像增强方法

    一.Imgaug简介 imgaug 是一个比torchvision更强大的数据增强工具包,这不仅体现在数据增强类别上,也包括数据增强方法的使用.比如,imgaug不仅提供了一些常见的shape增强方法 ...

  6. 计算机怎么搜索程序和文件格式,「闪电搜索」一款电脑必备的搜索文件软件,还有Everything...

    01 很多软件刚一出来时功能就很逆天 就让在这个软件变得特别有名气 从而使我们不再去找同类软件 这就会导致我们设备中的软件变得统一 很多人会安装同一种的软件 要是聊天沟通类的也倒是没什么 可其它类型的 ...

  7. 比百度还好用的搜索功能,支持「多条件」搜索哟

    在「发布搜素」时,超级表格新增了「多条件」搜索.改变了旧版只能单条件的搜索情况.本次搜索可以分为三个维度进行设置. ①允许模糊搜索  ②多行展示  ③必填 允许模糊搜素 不勾选则默认为「精确搜索」 搜 ...

  8. 提高「搜商」,挣大钱

    大家好,我是Z哥. 在之前的一篇讲述数据分析的文章<这个时代最重要的技能之一>中提到了这周要和大家聊聊「搜商」的事情. 搜商这个词诞生于互联网时代,体现的是一个人利用搜索引擎查找自己所需信 ...

  9. 「万字长文」谈认知差异——理解层次中的“金字塔”

    本文发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明- 当看到知乎一篇7万+赞的文章(点击阅读原文可查看),思绪万千久久回荡无法消 ...

最新文章

  1. java之php、Android、JAVA、C# 3DES加密解密
  2. 注意:宝塔曝未授权访问数据库漏洞,尽快升级版本!
  3. 中国房地产行业调查分析与发展前景研究报告2022年版
  4. Nginx实现404页面的几种方法
  5. python 绘制分布直方图_统计学中常见的4种抽样分布及其分布曲线(Python绘制)...
  6. 使用ExchangeRate-API查询免费可用的汇率数据
  7. UDP协议和socketserver以及文件上传
  8. c语言程序求点坐标在哪个象限,C课后习题
  9. python 数据结构面试_【Python排序面试题】面试问题:所谓数据结构,… - 看准网...
  10. 阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
  11. 1-n整数中1出现的次数
  12. 下载外网资源慢的解决办法
  13. MFC控件响应鼠标中键OnMouseWheel
  14. 总结一个技术总监的教训和经验
  15. wmware虚拟网卡 VMnet8 VMnet1未识别网络解决方法
  16. 存储过程——身份证校验
  17. 申请圣文森特牌照申请流程
  18. 第1章 开篇-为什么要做CI/CD?
  19. python编程认证找工作时有什么作用?
  20. Netty 学习 之(1)Netty是什么

热门文章

  1. 【FFmpeg】ffmpeg工具源码分析(一):main函数
  2. 【C++】Effective STL:50条有效使用STL的经验
  3. 【C++】google gflags详解
  4. 【opencv】ubuntu14.04上编译opencv2.4
  5. 【Ubuntu】Ubuntu14.04添加163的源
  6. 源码mysql安装问题_MySQL5.7源码安装问题汇总
  7. filezilla 共享多个目录_FileZilla|一个免费开源的FTP软件!
  8. Spring boot 忽略对mybatis的配置
  9. 读取本地照片 以流的形式进行显示
  10. java中的基本用法