機器學習分享——KNN演算法及numpy實現

Momodel發表於2019-04-30

KNN 是一種非引數的懶惰的監督學習演算法.

非引數的意思是,模型不會對基礎資料分佈做出任何假設。換句話說,模型的結構是根據資料確定的。懶惰的意思是沒有或者只有很少的訓練過程.

KNN 演算法既可以處理分類問題,測試資料的型別由所有 K 個最近鄰點投票決定,也可以處理迴歸問題,測試資料的值是所有 K 個最近鄰點的值的均值或眾數.

KNN 的演算法非常簡單.

例如,對於分類問題,演算法流程如下,

對需要預測的每個資料依次執行以下操作:

  1. 計算已知訓練資料集中的點與當前點之間的距離;
  2. 按照距離遞增次序排序;
  3. 選取與當前點距離最小的k個點;
  4. 確定前k個點所在類別的出現頻率;
  5. 返回前k個點出現頻率最高的類別作為當前點的預測分類。

在這裡插入圖片描述
需要注意的是,要對資料進行特徵縮放.下面兩張圖很好的闡釋了縮放的重要性.

image
image

那麼KNN在實際使用中有哪些優點和缺點呢?

它的優點有:

  • 可以處理線性和非線性資料
  • 直觀上易於理解
  • 具有較高的準確率
  • 既可以用作迴歸問題,也可以用作分類問題

它的缺點是

  • 計算代價大
  • 記憶體要求高
  • 資料量大時預測較慢
  • 對無關的特徵以及特徵縮放敏感

在實際的使用過程中,可能會遇到如下的問題.

  1. k 近鄰的類別出現了平局的情況. 例如在二分類中,正負型別的近鄰數相同,使用奇數個近鄰可以解決此問題,但是無法解決多分類的問題.這個時候可以
    • 隨機決定屬於哪個類別
    • 對某些類別設定優先順序
    • 使用最近鄰來做最終的決定

2.訓練資料的缺失值如何處理.如果不處理缺失值,則無法計算距離.對於缺失值的處理的核心原則是,儘可能小的影響距離的計算.一個合理的解決辦法是,使用訓練資料的平均值來填充缺失值.

最後附上實現程式碼,登入之後就能檢視了。 電腦端檢視原始碼

參考資料

  1. medium.com/@adi.bronsh…
  2. www.youtube.com/watch?v=DRI…
  3. www.datacamp.com/community/t…
  4. stats.stackexchange.com/questions/2…

———————————————————————————————————— Mo (網址:momodel.cn )是一個支援 Python 的人工智慧建模平臺,能幫助你快速開發訓練並部署 AI 應用。

相關文章