最近鄰方法是機器學(xué)習(xí)中一個非常流行的方法,它的原理很容易理解:鄰近的數(shù)據(jù)點是相似的數(shù)據(jù)點,更可能屬于同一分類。然而,在高維空間中快速地應(yīng)用最近鄰方法,卻是非常有挑戰(zhàn)性的工作。
全球最大的流媒體音樂服務(wù)商Spotify需要向上面的海量用戶推薦音樂,其中就用到了最近鄰方法。也就是在高維空間、大型數(shù)據(jù)集上應(yīng)用最近鄰方法。
由于維度高、數(shù)據(jù)規(guī)模大,直接應(yīng)用最近鄰方法并不可行,因此,最佳實踐是使用逼近方法搜索最近鄰。這方面有不少開源庫,比如Spotify開源的Annoy庫。Annoy庫的作者Erik Bernhardsson在開發(fā)Annoy的過程中發(fā)現(xiàn),盡管有成百上千的使用逼近方法搜索最近鄰的論文,卻很少能找到實踐方面的比較。因此,Erik開發(fā)了ANN-benchmarks,用來評測逼近最近鄰(approximate nearest neighbor,ANN)算法。
評估的實現(xiàn)
Annoy Spotify自家的C++庫(提供Python綁定)。Annoy最突出的特性是支持使用靜態(tài)索引文件,這意味著不同進(jìn)程可以共享索引。
FLANN 加拿大英屬哥倫比亞大學(xué)出品的C++庫,提供C、MATLAB、Python、Ruby綁定。
scikit-learn 知名的Python機器學(xué)習(xí)庫scikit-learn提供了LSHForest、KDTree、BallTree實現(xiàn)。
PANNS 純Python實現(xiàn)。已“退休”,作者建議使用MRPT。
NearPy 純Python實現(xiàn)?;诰植棵舾泄#↙ocality-sensitive hashing,簡稱LSH,一種降維方法)。
KGraph C++庫,提供Python綁定?;趫D(graph)算法。
NMSLIB (Non-Metric Space Library) C++庫,提供Python綁定,并且支持通過Java或其他任何支持Apache Thrift協(xié)議的語言查詢。提供了SWGraph、HNSW、BallTree、MPLSH實現(xiàn)。
hnswlib(NMSLIB項目的一部分) 相比當(dāng)前NMSLIB版本,hnswlib內(nèi)存占用更少。
RPForest 純Python實現(xiàn)。主要特性是不需要在模型中儲存所有索引的向量。
FAISS Facebook出品的C++庫,提供可選的GPU支持(基于CUDA)和Python綁定。包含支持搜尋任意大小向量的算法(甚至包括可能無法在RAM中容納的向量)。
DolphinnPy 純Python實現(xiàn)?;诔矫婢植棵舾泄K惴ā?/p>
Datasketch 純Python實現(xiàn)。基于MinHash局部敏感哈希算法。
PyNNDescent 純Python實現(xiàn)?;趉-近鄰圖構(gòu)造(k-neighbor-graph construction)。
MRPT C++庫,提供Python綁定?;谙∈桦S機投影(sparse random projection)和投票(voting)。
NGT: C++庫,提供了Python、Go綁定。提供了PANNG實現(xiàn)。
數(shù)據(jù)集
ANN-benchmarks提供了一些預(yù)先處理好的數(shù)據(jù)集。
結(jié)果
Erik提供了在AWS EC2機器(c5.4xlarge)上運行測試的結(jié)果——跑了好幾天才跑完,費用約100美元。
glove-100-angular
sift-128-euclidean
fashion-mnist-784-euclidean
gist-960-euclidean
nytimes-256-angular
glove-25-angular
從以上評測可以看出(越靠上、靠右,成績越好),幾乎在所有數(shù)據(jù)集上,排名前五的實現(xiàn)為:
HNSW(NMSLIB的低內(nèi)存占用版本),比Annoy快10倍。
KGraph位于第二,和HNSW的差距不算很大。和HNSW一樣,KGraph也是基于圖(graph)的算法。
SW-graph,源自NWSLIB的另一個基于圖的算法。
FAISS-IVF,源自Facebook的FAISS。
Annoy
在“評估的實現(xiàn)”一節(jié)中,我們看到,有不少使用局部敏感哈希(LSH)的庫。這些庫的表現(xiàn)都不是很好。在之前進(jìn)行的一次評測中,F(xiàn)ALCONN表現(xiàn)非常好(唯一表現(xiàn)優(yōu)良的使用局部敏感哈希的庫)。但是這次評測中,F(xiàn)ALCONN看上去退步得很厲害——原因未明。
從這次評測來看,基于圖的算法是當(dāng)前最先進(jìn)的算法(名列三甲的算法全都基于圖),特別是HNSW表現(xiàn)突出。
-
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8481瀏覽量
133855
原文標(biāo)題:高維空間最近鄰逼近搜索算法評測
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
Python實現(xiàn)k-近鄰算法
基于Hilbert曲線的近似k-最近鄰查詢算法
基于子空間樣本選擇的最近凸包分類器
改進(jìn)的共享型最近鄰居聚類算法
基于SRM自組織多區(qū)域覆蓋的可拒絕近鄰分類算法研究
Spark下的并行多標(biāo)簽最近鄰算法

激光散亂點云K最近鄰搜索算法
路網(wǎng)環(huán)境下的最近鄰查詢技術(shù)

基于最近鄰距離分布的空間聚類方法
最近鄰的隨機非線性降維
人工智能機器學(xué)習(xí)之K近鄰算法(KNN)
解決復(fù)雜數(shù)據(jù)最近鄰問題的通用方法
一種基于自然最近鄰的密度峰值聚類算法

基于改進(jìn)的Canopu和共享最近鄰的聚類算法

評論