【機器學習詳解】KNN分類的概念、誤差率及其問題

轉載請註明出處http://blog.csdn.net/luoshixian099/article/details/50923056

勿在浮沙築高臺

KNN概念  

      KNN(K-Nearest Neighbors algorithm)是一種非參數模型算法。在訓練數據量爲N的樣本點中,尋找最近鄰測試數據x的K個樣本,然後統計這K個樣本的分別輸入各個類別w_i下的數目k_i,選擇最大的k_i所屬的類別w_i作爲測試數據x的返回值。當K=1時,稱爲最近鄰算法,即在樣本數據D中,尋找最近鄰x的樣本,把x歸爲此樣本類別下。常用距離度量爲歐式距離。

算法流程:


                 

左圖所示:在二維平面上要預測中間'*'所屬顏色,採用K=11時的情況,其中有4黑色,7個藍色,即預測'*'爲藍色。

右圖所示:當K=1時,即最近鄰算法,相當於把空間劃分成N個區域,每個樣本確定一塊區域。每個區域中的點都歸屬於該樣本的類別,因爲該區域的數據點與所用樣本相比與區域樣本最近,此算法也被稱爲Voronoi tessellation


--------------------------------------------------------------------------------------------------------------------------------------------

  下面四副圖像是在一個二維平面上,數據點類別爲3類,採用K=10。圖(a)爲樣本數據點;圖(b)爲平面上每個位置屬於y=1(對應‘+’)的概率熱量圖像,圖(c)爲類別y=2(對應'*')時對應的熱量圖像;圖(d)採用MAP估計(即最大概率的類別)平面各點所屬類別。

  

------------------------------------------------------------------------------------------------------------------

KNN算法誤差率

假設最優貝葉斯分類率記爲P_B,根據相關論文證明KNN算法的誤差率爲:

當數據樣本量N趨於無窮大時,K=1時:    ,M爲數據類別總數

當數據樣本量N趨於無窮大時,M=2時:;

由公式看出,KNN的算法要優於1-NN算法,因爲降低了誤差下界。並隨着k的增大,P_kNN漸近於最優誤差率P_B;事實上,當k->∞時(但仍然佔樣本總量N很小一部分),KNN算法準確率趨近於貝葉斯分類器。


KNN算法的問題

  • 當數據量N很大,同時數據維度D很高,搜索效率會急劇下降。若採用暴力求解法,複雜度爲。爲增大效率,可以採用KD樹等算法優化,見:KD樹與BBF算法解析
  • 有時根據現實情況,需要降低樣本數量,可以採用prototype editing或者condensing算法等prototype editing算法採用自身數據樣本作爲測試樣本,應用KNN算法,若分類錯誤則剔除該樣本。
  • 當樣本總量N很小時,會造成錯誤率上升。一種解決辦法是訓練度量距離方法,對不同的樣本採用不同的度量方法目的是爲了降低錯誤率,此種方法可以分爲:全局方法(global)、類內方法(class-dependent)、局部方法(locally-dependent)。


Ref:Machine Learning: A Probabilistic Perspective

         Pattern Recognition,4th.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章