高維空間最近鄰逼近搜尋演算法評測

2021-08-21 23:39:14 字數 1768 閱讀 8418

最近鄰方法是機器學習中乙個非常流行的方法,它的原理很容易理解:鄰近的資料點是相似的資料點,更可能屬於同一分類。然而,在高維空間中快速地應用最近鄰方法,卻是非常有挑戰性的工作。

全球最大的流****服務商spotify需要向上面的海量使用者推薦**,其中就用到了最近鄰方法。也就是在高維空間、大型資料集上應用最近鄰方法。

由於維度高、資料規模大,直接應用最近鄰方法並不可行,因此,最佳實踐是使用逼近方法搜尋最近鄰。這方面有不少開源庫,比如spotify開源的annoy庫。annoy庫的作者erik bernh

評估的實現

資料集ann-benchmarks提供了一些預先處理好的資料集。

資料集維度

訓練集大小

測試集大小

近鄰距離

fashion-mnist

78460,000

10,000

100歐幾里得

hdf5 (217mb)

gist

9601,000,000

1,000

100歐幾里得

hdf5 (3.6gb)

glove

251,183,514

10,000

100角相似性

hdf5 (121mb)

glove

501,183,514

10,000

100角相似性

hdf5 (235mb)

glove

1001,183,514

10,000

100角相似性

hdf5 (463mb)

glove

2001,183,514

10,000

100角相似性

hdf5 (918mb)

mnist

78460,000

10,000

100歐幾里得

hdf5 (217mb)

nytimes

256290,000

10,000

100角相似性

hdf5 (301mb)

sift

1281,000,000

10,000

100歐幾里得

hdf5 (501mb)

結果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表現突出。

三維空間找最近點

菜雞只會資料很小很小的做法 給定三維空間上n個點,每個點都有xi,yi,zi三個座標值 找出其中的一對點的距離,使得在這n個點的所有點對中,該距離為所有點對中最小的 輸入描述 第一行輸入整數n,2 n 1e5 第二行到第n 1行,每行輸入xi,yi,zi三個整數,代表第i個點的座標 1e4 xi,y...

二維空間下的最近點對查詢

include include using namespace std float minu 10000000 int fff,bbb void insertsort float list,float x,int a,int b void insertsort float list,float x,...

三維空間直線最近點對hdu4741

求兩條直線之間的關係 三維 輸入 兩條不為點的直線 輸出 相交返回xiangjiao和交點p,平行返回pingxing,共線返回gongxian int lineandline line3d l1,line3d l2,point3d p return pinxing 判斷是否共面 point3d t...