本文主要內容來自周志華《機器學習》和Peter Flach 《機器學習》
在k-近鄰算法1、k-近鄰算法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\),有
- (正定性) \(D(\mathbf{x},\mathbf{y}) \ge 0\), 當且僅當\(\mathbf{x}=\mathbf{y}\)時\(D(\mathbf{x},\mathbf{y}) = 0\)
- (對稱性) $D(\mathbf{x},\mathbf{y}) = D(\mathbf{y},\mathbf{x}) $
- (三角不等式) $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}\),
其中,\(\|\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范數閔可夫斯基距離
曼哈頓距離(Manhattan distance)或街區距離(cityblock distance),即1范數閔可夫斯基距離
切比雪夫距離(Chebyshev distance),即$ \infty$范數閔可夫斯基距離
漢明距離(Hamming distance),假設\(\mathbf{x}\)和\(\mathbf{y}\)表示字符串
其中如果\(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\)
馬氏距離表示兩個服從同一分布並且其協方差矩陣為Σ的隨機變量之間的差異程度。如果協方差矩陣為單位矩陣,那么馬氏距離簡化為歐氏距離,如果協方差矩陣為對角陣,則其可稱為正規化的歐氏距離
還有一些距離度量如余弦距離(Cosine distance)、傑卡德距離(Jaccard distance)、相關距離(Correlation distance)和信息熵(Information Entropy),可參考機器學習——幾種距離度量方法比較
k值的選取
k是一個重要參數,當k選不同值時會產生不同的結果。
如下圖,當k取為3時,結果為紅色三角形,而當k取為5時,結果為藍色正方形。

k值設置過小會降低分類精度;若設置過大且測試樣本屬於訓練集中包含數據較少的類,則會增加噪聲,降低分類效果。
通常,k值的設定采用交叉檢驗的方式(以k=1為基准)
經驗規則:k一般低於訓練樣本數的平方根
