1. 程式人生 > >機器學習分類篇-最鄰近規則分類KNN

機器學習分類篇-最鄰近規則分類KNN

最鄰近規則分類演算法(K-Nearest Neighbor),Cover和Hart在1968年提出了最初的鄰近演算法,也被稱為基於例項的學習或懶惰學習,與決策樹演算法相比,處理訓練集的時候並不建立任何模型,進行分類時才將測試樣例和所有已知例項進行比較進而分類。

這裡寫圖片描述

如上圖,主要有兩種色塊,藍色方塊和紅色三角,對綠色未知圓點進行判斷分類,其屬於紅色還是藍色?
KNN演算法一般可以分為兩步,為了判斷未知例項的類別,會以所有已知例項作為參照,計算未知例項與所有已知例項的距離。所以第一步先分別計算出圓點和所有色塊的距離。

第二步,選擇一個引數K,判斷離未知例項最近的K個例項是什麼型別,以少數服從多數的原則進行歸類。
上圖中,假如我們選擇K的值是1,則離未知例項最近的一個色塊是藍色,未知例項被歸類為藍色。假如我們選擇K的值為4,則很明顯,離未知例項最近的4個色塊3個是紅色,1個是藍色,未知例項被歸類為紅色。

所以K的選擇對結果的影響很大,一般為了得出結果K選擇奇數,通過增大K也可以增強對噪音資料的健壯性。

對於距離的衡量方式有很多種,最常用的是Euclidean distance:
這裡寫圖片描述
二維的下距離計算公式如上圖簡單的數學公式,擴充套件到n維下x,y兩點的距離公式:
這裡寫圖片描述

KNN演算法優點是簡單易於理解和實現,缺點是需要大量的空間儲存所有例項,因為未知例項要和所有例項進行計算演算法複雜度高,而且當一類樣本過大,則不管未知例項屬於哪一類都很容易歸為數量過大的這一類。
如圖:
這裡寫圖片描述
Y點肉眼去看因為在紅色區域內很容易判斷出多半屬於紅色一類,但因為藍色過多,若K值選取稍大則很容易將其歸為藍色一類。為了改進這一點,可以為每個點的距離增加一個權重,這樣裡的近的點可以得到更大的權重,比如距離d,權重1/d。

再計算一個例子:
這裡寫圖片描述

根據電影的打鬥次數和接吻次數,將電影分類為Romance和Action,已經有6個已知樣例,怎麼樣根據未知樣例的打鬥次數和接吻次數判斷其電影型別?

將打鬥次數和接吻次數作為二維座標,判斷每個已知樣例電影與未知電影的距離,可以得出最近的3個電影都是Romance電影,則未知電影判斷為Romance電影,這就是KNN演算法。

下一篇是Python對KNN演算法的實踐。