高维空间逼近最近邻评测

最近邻方法是机器学习中一个非常流行的方法,它的原理很容易理解:邻近的数据点是相似的数据点,更可能属于同一分类。然而,在高维空间中快速地应用最近邻方法,却是非常有挑战性的工作。
全球最大的流媒体音乐服务商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表现突出。

人脸识别技术的到来,温州多家医院实施刷脸看病
能超过亚马逊Kiva机器人的智能机器人系统来了
光伏产业链下半年供需展望,尺寸之争后遗症开始显现
从0到1教你写RT-Thread之裸机系统与多线程系统
基于Cr2C的面内双势垒磁性隧道结中的巨遂穿磁阻
高维空间逼近最近邻评测
一文看懂keil4和keil5最大区别
通信系统内部产生EMI的原因以及消除EMI的方法介绍
基于LM386的两站对讲机电路
华为荣耀畅玩7X发布会最新消息:外观、配置、拍照、价格先知道,发布会视频直播地址
不同种类的二极管如何替换
虎牙提交IPO:拟筹资2亿美元
万元以内的百吋4K激光电视,含菲涅尔柔性屏
5G与云网融合赋能产业新未来的发展趋势
LED照明进入势力消长期
CD1502驱动程序详细讲解过程及源码
安泰ATG-2021B功率信号源在超声无损检测研究中的应用
常见的小型自动气象站的作用是什么
聚焦CES 2013:首款兼容iOS系统的新型血氧仪惊艳亮相
双组份导热凝胶有什么作用