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

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

非參數的意思是,模型不會對基礎數據分佈作出任何假設。換句話說,模型的結構是根據數據肯定的。懶惰的意思是沒有或者只有不多的訓練過程.app

KNN 算法既能夠處理分類問題,測試數據的類型由全部 K 個最近鄰點投票決定,也能夠處理迴歸問題,測試數據的值是全部 K 個最近鄰點的值的均值或衆數.學習

KNN 的算法很是簡單.測試

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

對須要預測的每一個數據依次執行如下操做:人工智能

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

在這裏插入圖片描述
須要注意的是,要對數據進行特徵縮放.下面兩張圖很好的闡釋了縮放的重要性.spa

image
image

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

它的優勢有:rest

  • 能夠處理線性和非線性數據
  • 直觀上易於理解
  • 具備較高的準確率
  • 既能夠用做迴歸問題,也能夠用做分類問題

它的缺點是blog

  • 計算代價大
  • 內存要求高
  • 數據量大時預測較慢
  • 對無關的特徵以及特徵縮放敏感

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

  1. k 近鄰的類別出現了平局的狀況. 例如在二分類中,正負類型的近鄰數相同,使用奇數個近鄰能夠解決此問題,可是沒法解決多分類的問題.這個時候能夠

    • 隨機決定屬於哪一個類別
    • 對某些類別設置優先級
    • 使用最近鄰來作最終的決定

2.訓練數據的缺失值如何處理.若是不處理缺失值,則沒法計算距離.對於缺失值的處理的核心原則是,儘量小的影響距離的計算.一個合理的解決辦法是,使用訓練數據的平均值來填充缺失值.

最後附上實現代碼,登陸以後就能查看了。
電腦端查看源碼

參考資料

  1. https://medium.com/@adi.brons...
  2. https://www.youtube.com/watch...
  3. https://www.datacamp.com/comm...
  4. https://stats.stackexchange.c...

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

相關文章
相關標籤/搜索