2010-11-30 14 views
8

我的特徵向量既有連續的(或廣泛的)和二進制組件。如果我簡單地使用歐幾里德距離,連續分量將產生更大的影響:如何在k-Nearest-Neighbor算法中使用二進制和連續特徵?

將對稱與非對稱表示爲0和1,以及一些不太重要的比例範圍從0到100,從對稱變爲非對稱具有微小的距離影響相比,改變比例25.

我可以增加更多的權重對稱(例如通過使其爲0或100),但有沒有更好的方式來做到這一點?

回答

9

您可以嘗試使用歸一化的歐幾里得距離,例如在第一部分here的末尾描述。

它只是通過其標準偏差縮放每個特徵(連續或離散)。這比另一張海報建議的範圍(max-min)縮放更穩健。

1

如果我正確理解您的問題,正火(又名「重新縮放)在數據組中的每個維度或列是處理過的加權尺寸的現有技術,例如,

ev_scaled = (ev_raw - ev_min)/(ev_max - ev_min) 

在R,用於例如,你可以寫這個函數:

ev_scaled = function(x) { 
    (x - min(x))/(max(x) - min(x)) 
} 

它是這樣工作的:

# generate some data: 
# v1, v2 are two expectation variables in the same dataset 
# but have very different 'scale': 
> v1 = seq(100, 550, 50) 
> v1 
    [1] 100 150 200 250 300 350 400 450 500 550 
> v2 = sort(sample(seq(.1, 20, .1), 10)) 
> v2 
    [1] 0.2 3.5 5.1 5.6 8.0 8.3 9.9 11.3 15.5 19.4 
> mean(v1) 
    [1] 325 
> mean(v2) 
    [1] 8.68 

# now normalize v1 & v2 using the function above: 
> v1_scaled = ev_scaled(v1) 
> v1_scaled 
    [1] 0.000 0.111 0.222 0.333 0.444 0.556 0.667 0.778 0.889 1.000 
> v2_scaled = ev_scaled(v2) 
> v2_scaled 
    [1] 0.000 0.172 0.255 0.281 0.406 0.422 0.505 0.578 0.797 1.000 
> mean(v1_scaled) 
    [1] 0.5 
> mean(v2_scaled) 
    [1] 0.442 
> range(v1_scaled) 
    [1] 0 1 
> range(v2_scaled) 
    [1] 0 1 
相關問題