k-近鄰算法4——距離度量的定義和k值的選取


本文主要內容來自周志華《機器學習》和Peter Flach 《機器學習》

k-近鄰算法1k-近鄰算法2, k-近鄰算法3三篇文章從實踐上學習了k-近鄰算法, 本文從理論上學習k-近鄰算法。

k-近鄰(k-Nearest Neighbor, 簡稱kNN)算法是一種常用的監督學習方法,其工作機制:給定測試樣本,基於某種距離度量找出訓練集中與其最靠近的k個訓練樣本,然后基於這k個“鄰居”的信息進行預測。通常在分類任務中,使用多數表決法(majority vote method, 也叫投票法),即選擇這k個樣本中出現最多的類別標簽作為預測結果;在回歸任務中使用平均法(verage method),即將這k個樣本的輸出數值的平均值作為預測結果;另外,基於距離遠近進行加權投票或加權平均,如距離大小與樣本權重成反比。

從實踐上,我們發現k-近鄰算法沒有訓練過程,它只是把訓練樣本保存起來,訓練開銷為零,收到測試樣本后才進行處理,它是典型的懶惰學習(lazy learning);相應的,那些在訓練過程階段對訓練樣本進行學習處理的方式,被稱為急切學習(eager learning)。

由k-近鄰算法的工作機制可知,距離度量的定義和k值的選取是非常重要的。

距離度量的定義

定義(距離度量): 設實例空間為\(H\),該空間中的一個距離函數可定義為映射\(D: H \times H \to R\),則對任意\(\mathbf{x},\mathbf{y},\mathbf{z} \in H\),有

  1. (正定性) \(D(\mathbf{x},\mathbf{y}) \ge 0\), 當且僅當\(\mathbf{x}=\mathbf{y}\)\(D(\mathbf{x},\mathbf{y}) = 0\)
  2. (對稱性) $D(\mathbf{x},\mathbf{y}) = D(\mathbf{y},\mathbf{x}) $
  3. (三角不等式) $D(\mathbf{x},\mathbf{z}) \ge D(\mathbf{x},\mathbf{y}) + D(\mathbf{y},\mathbf{z}) $

如果把第一條改為,當\(\mathbf{x}\not=\mathbf{y}\)時也成立\(D(\mathbf{x},\mathbf{y}) = 0\),則\(D\)為偽度量(pseudo-metric)

閔可夫斯基距離(Minkowski distance):對於\(n\)維向量\(\mathbf{x}\)\(\mathbf{y}\),

\[D_p(\mathbf{x}, \mathbf{y}) = (\sum\limits_{i=1}^n |x_i-y_i|^p)^{\frac{1}{p}} = \|\mathbf{x}- \mathbf{y}\|_p \]

其中,\(\|\mathbf{x}\|_p=(\sum\limits_{i=1}^n |x_i|^p)^{\frac{1}{p}}\)為向量\(\mathbf{x}\)\(p\)范數(也稱\(L_p\)范數)。

\(p<1\)時,閔可夫斯基距離不滿足三角不等式(triangle inequality),所以不能作為距離度量。

歐式距離(Euclidean distance),即2范數閔可夫斯基距離

\[D_2(\mathbf{x}, \mathbf{y}) = \sqrt{\sum\limits_{i=1}^n |x_i-y_i|^2}= \sqrt{(\mathbf{x}- \mathbf{y})^T(\mathbf{x}- \mathbf{y})} \]

曼哈頓距離(Manhattan distance)或街區距離(cityblock distance),即1范數閔可夫斯基距離

\[D_1(\mathbf{x}, \mathbf{y}) = \sum\limits_{i=1}^n |x_i-y_i| \]

切比雪夫距離(Chebyshev distance),即$ \infty$范數閔可夫斯基距離

\[D_{\infty}(\mathbf{x}, \mathbf{y}) = \max\limits_i |x_i-y_i| \]

漢明距離(Hamming distance),假設\(\mathbf{x}\)\(\mathbf{y}\)表示字符串

\[D(\mathbf{x}, \mathbf{y})=\sum\limits_{i=1}^n I[x_i=y_i] \]

其中如果\(x_i=y_i\),則\(I[x_i=y_i]=0\),否則\(I[x_i=y_i]=1\)

例如

"1011101"和"1001001"的漢明距離是2. 
"2143896" 和 "2233796" 的漢明距離是3. 
"toned"和"roses"的漢明距離是3.

萊文斯坦距離(Levenshtein distance),又稱為編輯距離(Edit distance),是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符。

kitt–> sit  替換k為s
sitt –> sit 刪除t
sittin –> sitting 插入g

馬氏距離(Mahalanobis distance),記\(\mathbf{x}\)\(\mathbf{y}\)之間的協方差為\(\Sigma\)

\[D(\mathbf{x}, \mathbf{y}) = \sqrt{(\mathbf{x}-\mathbf{y})^T \Sigma^{-1}(\mathbf{x}-\mathbf{y})} \]

馬氏距離表示兩個服從同一分布並且其協方差矩陣為Σ的隨機變量之間的差異程度。如果協方差矩陣為單位矩陣,那么馬氏距離簡化為歐氏距離,如果協方差矩陣為對角陣,則其可稱為正規化的歐氏距離

還有一些距離度量如余弦距離(Cosine distance)、傑卡德距離(Jaccard distance)、相關距離(Correlation distance)和信息熵(Information Entropy),可參考機器學習——幾種距離度量方法比較

k值的選取

k是一個重要參數,當k選不同值時會產生不同的結果。

如下圖,當k取為3時,結果為紅色三角形,而當k取為5時,結果為藍色正方形。

k值設置過小會降低分類精度;若設置過大且測試樣本屬於訓練集中包含數據較少的類,則會增加噪聲,降低分類效果。

通常,k值的設定采用交叉檢驗的方式(以k=1為基准)

經驗規則:k一般低於訓練樣本數的平方根


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM