1. 程式人生 > >kNN(k近鄰演算法)

kNN(k近鄰演算法)

K近鄰分析(KNN)

一、概述

KNN演算法是一種有監督學習的分類演算法。所謂有監督學習,就是在應用演算法之前我們必須準備一組訓練集,訓練集中的每個例項都是由一些特徵和一個分類標籤組成;通常還會存在一個測試集,用來測試訓練出來的分類模型的準確性。其實KNN演算法並沒有體現出有監督學習的所有特點,沒有模型,只有演算法。甚至可以說這就是一種暴力掃描法,執行效率上比較低效。

KNN的具體演算法為:

二、KNN的實現:

注:最後的多數表決相當於0-1最小風險。

三、KNN的引數選擇:

(1)  距離的選擇:LP範數

(2)  K的選擇:K值的選擇會對k近鄰法的結果產生重大影響。如果k較小,相當於用較小的鄰域中的訓練例項進行預測,“學習”的近似誤差

會減小,只有與輸入例項較近的訓練例項才會對預測產生作用,但是“學習”的估計誤差會增大,預測的結果會對近鄰的例項點非常敏感,如果近鄰的例項點恰好是噪聲,預測就會出錯,換而言之,k的值偏小,意味著模型變複雜,冗餘發生過擬合;如果選擇較大的K值,就相當於在較大的鄰域中的訓練例項進行預測,其優點是可以減少學習的估計誤差,缺點是學習的近似誤差會增大,這是與輸入例項較遠的訓練例項也會對預測起作用,使預測發生錯誤。在應用中,k一般取一個比較小的數值,通常採用交叉驗證法來取選擇最優的K值。

四、KNN的實現-kd樹

實現k近鄰法時,主要考慮的問題是:如何對訓練資料進行快速k近鄰搜尋。最簡單的實現方法是線性掃描,這種方法比較耗時,為了提高k近鄰搜尋的效率,可以考慮特殊結構儲存資料,以減少計算距離的次數,具體方法有很多,kd樹(kd tree)就是其中的一種。