0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

高维空间逼近最近邻评测

zhKF_jqr_AI 来源:未知 作者:胡薇 2018-05-29 08:33 次阅读

最近邻方法是机器学习中一个非常流行的方法,它的原理很容易理解:邻近的数据点是相似的数据点,更可能属于同一分类。然而,在高维空间中快速地应用最近邻方法,却是非常有挑战性的工作。

全球最大的流媒体音乐服务商Spotify需要向上面的海量用户推荐音乐,其中就用到了最近邻方法。也就是在高维空间、大型数据集上应用最近邻方法。

由于维度高、数据规模大,直接应用最近邻方法并不可行,因此,最佳实践是使用逼近方法搜索最近邻。这方面有不少开源库,比如Spotify开源的Annoy库。Annoy库的作者Erik Bernhardsson在开发Annoy的过程中发现,尽管有成百上千的使用逼近方法搜索最近邻的论文,却很少能找到实践方面的比较。因此,Erik开发了ANN-benchmarks,用来评测逼近最近邻(approximate nearest neighbor,ANN)算法

评估的实现

Annoy Spotify自家的C++库(提供Python绑定)。Annoy最突出的特性是支持使用静态索引文件,这意味着不同进程可以共享索引。

FLANN 加拿大英属哥伦比亚大学出品的C++库,提供C、MATLAB、Python、Ruby绑定。

scikit-learn 知名的Python机器学习库scikit-learn提供了LSHForest、KDTree、BallTree实现。

PANNS 纯Python实现。已“退休”,作者建议使用MRPT。

NearPy 纯Python实现。基于局部敏感哈希(Locality-sensitive hashing,简称LSH,一种降维方法)。

KGraph C++库,提供Python绑定。基于图(graph)算法。

NMSLIB (Non-Metric Space Library) C++库,提供Python绑定,并且支持通过Java或其他任何支持Apache Thrift协议的语言查询。提供了SWGraph、HNSW、BallTree、MPLSH实现。

hnswlib(NMSLIB项目的一部分) 相比当前NMSLIB版本,hnswlib内存占用更少。

RPForest 纯Python实现。主要特性是不需要在模型中储存所有索引的向量。

FAISS Facebook出品的C++库,提供可选的GPU支持(基于CUDA)和Python绑定。包含支持搜寻任意大小向量的算法(甚至包括可能无法在RAM中容纳的向量)。

DolphinnPy 纯Python实现。基于超平面局部敏感哈希算法。

Datasketch 纯Python实现。基于MinHash局部敏感哈希算法。

PyNNDescent 纯Python实现。基于k-近邻图构造(k-neighbor-graph construction)。

MRPT C++库,提供Python绑定。基于稀疏随机投影(sparse random projection)和投票(voting)。

NGT: C++库,提供了Python、Go绑定。提供了PANNG实现。

数据集

ANN-benchmarks提供了一些预先处理好的数据集。

结果

Erik提供了在AWS EC2机器(c5.4xlarge)上运行测试的结果——跑了好几天才跑完,费用约100美元。

glove-100-angular

sift-128-euclidean

fashion-mnist-784-euclidean

gist-960-euclidean

nytimes-256-angular

glove-25-angular

从以上评测可以看出(越靠上、靠右,成绩越好),几乎在所有数据集上,排名前五的实现为:

HNSW(NMSLIB的低内存占用版本),比Annoy快10倍。

KGraph位于第二,和HNSW的差距不算很大。和HNSW一样,KGraph也是基于图(graph)的算法。

SW-graph,源自NWSLIB的另一个基于图的算法。

FAISS-IVF,源自Facebook的FAISS。

Annoy

在“评估的实现”一节中,我们看到,有不少使用局部敏感哈希(LSH)的库。这些库的表现都不是很好。在之前进行的一次评测中,FALCONN表现非常好(唯一表现优良的使用局部敏感哈希的库)。但是这次评测中,FALCONN看上去退步得很厉害——原因未明。

从这次评测来看,基于图的算法是当前最先进的算法(名列三甲的算法全都基于图),特别是HNSW表现突出。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8061

    浏览量

    130441

原文标题:高维空间最近邻逼近搜索算法评测

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python实现k-近邻算法

    一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征相比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中的前k个
    发表于 10-10 10:32

    基于麦克风阵列模拟人耳进行三维空间的声源定位

    一、设计概述 /Design Introduction1.1 设计目的基于麦克风阵列模拟人耳进行三维空间的声源定位,有着广泛应用前景,可应用于大型机械产品的故障检测以及新生婴儿先天性心脏病检测筛查等
    发表于 08-06 09:21

    核仿射子空间最近点分类算法

    受支持向量机的几何解释和最近点问题启发,提出一种新型的模式分类算法——核仿射子空间最近点分类算法。该算法在核空间中,将支持向量机几何模型中的最近
    发表于 04-16 11:38 11次下载

    基于Hilbert曲线的近似k-最近邻查询算法

    在低维空间中R树的查询效率较高,而在高维空间中其性能急剧恶化,降维成为解决问题的关键。利用Hilbert曲线的降维特性,该文提出基于Hilbert曲线近似k-最近邻查询算法AKNN,分析
    发表于 04-20 08:53 18次下载

    基于子空间样本选择的最近凸包分类器

    最近邻凸包分类器需要求解测试样本到训练集凸包距离的凸二次规划问题,对于训练集规模较大的情况,有必要在分类之前进行适当的样本选择。为此该文提出基于子空间样本选择
    发表于 04-20 09:47 23次下载

    改进的共享型最近邻居聚类算法

    聚类效果往往依赖于密度和相似度的定义,并且当数据的维增加时,其复杂度也随之增加。该文基于共享型最近邻居聚类算法SNN,提出了一种改进的共享型最近邻居聚类算法RSNN,
    发表于 05-16 11:38 11次下载

    Spark下的并行多标签最近邻算法

    随着大数据时代的到来,大规模多标签数据挖掘方法受到广泛关注。多标签最近邻算法ML_KNN是一种简单高效、应用广泛的多标签分类方法,其分类精度在很多应用中都高于其他常见的多标签学习方法。然而随着需要
    发表于 11-22 17:32 1次下载
    Spark下的并行多标签<b class='flag-5'>最近邻</b>算法

    激光散乱点云K最近邻搜索算法

    针对激光散乱点云的数据量大,且具有面型的特点,为降低存储器使用量,提高散乱点云的处理效率,提出了一种散乱点云K最近邻(KNN)搜索算法。首先,利用多级分块、动态链表的存储方式,只存储非空的子空间编号
    发表于 12-11 14:09 1次下载

    路网环境下的最近邻查询技术

    最近邻查询作为基于位置服务的重要支持性技术之一,引起了众多学者的广泛关注和深入研究,相对于欧式空间而言,路网环境下的最近邻查询更贴近人们的生活,有着更重要的研究意义.路网环境下庞大的数据量和复杂
    发表于 12-18 14:14 0次下载
    路网环境下的<b class='flag-5'>最近邻</b>查询技术

    基于最近邻距离分布的空间聚类方法

    基于最近邻距离分布的空间聚类方法,这个算法是基于这样一个假设,假设在数据空间的某个特定部分,一个聚类内部的点是均匀分布的。实验分析表明,该方法不仅能发现任意形状的簇,而且对于大型空间
    发表于 12-19 11:30 0次下载

    最近邻的随机非线性降维

    针对线性降维技术应用于具有非线性结构的数据时无法得到令人满意的结果的问题,提出一种新的着重于保持高维空间局部最近邻信息的非线性随机降维算法( NNSE)。该算法首先在高维空间中通过计算样本点之间
    发表于 12-23 11:45 0次下载

    解决复杂数据最近邻问题的通用方法

    为了找到最近邻,通常所用的方法是将数据分成好几份。假设你的数据就像在牧场中吃草的奶牛,给分散在草场中的牛群画不同的圆圈,现在进来了一头新奶牛,问它会落在哪个圆圈里?可以肯定的是,这头新奶牛的最近邻一定也在这个圈里。
    的头像 发表于 08-16 09:24 2031次阅读

    基于判别核主元空间k近邻的批次过程监视

    选取,使得核矩阵能有效提取数据的关联特征,保持数据的类别信息;其次,在核主元空间中引用K近邻规则代替传统的T2统计方法,后近邻规则可以有效处理主元空间非线性和多模态等特征的故障检测问题
    发表于 01-22 15:54 4次下载
    基于判别核主元<b class='flag-5'>空间</b>k<b class='flag-5'>近邻</b>的批次过程监视

    一种基于自然最近邻的密度峰值聚类算法

    最近邻的密度峰值聚类算法( Density Peaks Clusteringbased on Natural Nearest Neighbor,NNN-DPC)。该算法无需指定任何参数,是一种非参数
    发表于 04-08 11:18 12次下载
    一种基于自然<b class='flag-5'>最近邻</b>的密度峰值聚类算法

    基于改进的Canopu和共享最近邻的聚类算法

    为辅助银行机构进行精准的服务推荐,提出了基于改进的Caηopy和共享最近邻相似度的聚类算法。基于该算法对用户进行细分,针对用户群特点进行精准服务推荐。该算法首先采用最大值和最小值对 Canopy算法
    发表于 04-28 11:44 2次下载
    基于改进的Canopu和共享<b class='flag-5'>最近邻</b>的聚类算法