ML入門(十九)KNN(懶惰學習)

Chung-Yi
程式設計之旅
Published in
2 min readSep 30, 2019

為什麼說KNN是懶惰學習的分類算法?之所以稱“懶惰”並不是由於此類算法看起來很簡單,而是在訓練模型過程中這類算法並不去學習一個判別式函數(損失函數)而是要記住整個訓練集,這樣解釋可能沒有很懂,那就看看下面那張圖吧!

對於預測新的數據,在範圍內與旁邊的鄰居進行比較,並以這幾個鄰居(訓練樣本)中出現最多的分類標籤作為最終新樣本數據的預測標籤。就好像國小國中常常會搞小團體,某天新來的同學突然被要求選邊站,不想以後在班上被欺負,當然選擇人多的那一邊嘛!!

或是更簡單一點,用一句話就可以形容KNN的原理,其概念與「近朱者赤,近墨者黑」相同,就是周圍的資料決定其分類。

步驟

  1. 決定k值及距離度量。
  2. 針對新的資料,找到訓練集中和它最近的k個樣本。
  3. 以多數決的方式進行投票來決定類別。

如何選定k值

  1. 如果選擇較小的k值,k = 1,會造成離新的資料最近的類別是什麼他就是什麼類別,最容易overfitting
  2. 如果k = N(訓練資料),預測結果都是屬於在訓練資料中最多的類別
  3. 如果k是偶數,則有可能碰到無法直接決定類別,例如k=4,結果在i附近的點有2個type A的資料與 2個type B的資料
    導致無法判斷結果

參考文獻

[Machine Learning] kNN分類演算法

沒有想像中簡單的簡單分類器 Knn

--

--

Chung-Yi
程式設計之旅

我思故我在。跨領域的麻瓜工程師,希望透過文字跟你/妳交流分享