Machine-Learning
是來自 Beyer 等人的相對對比定理。論文:“關於高維空間中距離度量的令人驚訝的行為”誤導?
這在提到維度災難時經常被引用並且去
(右手公式稱為相對對比度)
該定理的結果表明,到給定查詢點的最大和最小距離之間的差異不會像到高維空間中任何點的最近距離一樣快。這使得鄰近查詢變得毫無意義且不穩定,因為最近和最遠鄰居之間的區別很差。
然而,如果一個人真的嘗試計算樣本值的相對對比度,這意味著一個人採用一個包含非常小的值的向量併計算到零向量的距離,並對一個包含更大值的向量做同樣的事情,然後一個人比較這些值一個維度 3 和一個維度大幾倍,人們會看到,雖然比率確實降低了,但變化是如此之小,以至於與實際使用的維度數量無關(或者有誰知道有人處理具有格雷厄姆數大小的數據-我猜這是描述論文實際相關的效果所需的大小 - 我認為不是)。
如前所述,這個定理經常被引用來支持這樣一種說法,即在高維空間中基於歐幾里得空間測量接近度是一種糟糕的策略,作者自己這麼說,但所提出的行為實際上並沒有發生,這讓我認為這個定理被以一種誤導的方式使用。
示例:帶
d
維度a=np.ones((d,)) / 1e5 b=np.ones((d,)) * 1e5 dmin,dmax=norm(a), norm(b) (dmax-dmin)/dmin
對於 d=3
9999999999.0
對於 d=1e8
9999999998.9996738
並且使用 1e1 而不是 1e5(假設數據是標準化的)
對於 d=3
99.0
對於 d=1e8
98.999999999989527
不,這個定理沒有誤導性。它當然可以被錯誤地應用,但對於任何定理都是如此。
這是一個簡單的 MATLAB 腳本來演示它是如何工作的:
xd = randn(1e5,10000); %% cols = [1,10,100,1000,10000]; for c = cols xdt = table(xd(:,1:c)); res = table2array(rowfun(@norm,xdt)); mr = mean(res); res1 = var(res/mr); res2 = (max(res) - min(res))/min(res); fprintf('res1: %f, res2: %f\n',res1,res2) end
輸出:
res1: 0.568701, res2: 2562257.458668 res1: 0.051314, res2: 9.580602 res1: 0.005021, res2: 0.911065 res1: 0.000504, res2: 0.221981 res1: 0.000050, res2: 0.063720
在我的代碼中, res1 和 res2 是論文中等式中的兩個表達式:一個用於方差,第二個用於對比。
您可以看到當維度從 1 變為 10,000 時,兩者是如何變為零的。