KNN 是一種非引數的懶惰的監督學習演算法.
非引數的意思是,模型不會對基礎資料分佈做出任何假設。換句話說,模型的結構是根據資料確定的。懶惰的意思是沒有或者只有很少的訓練過程.
KNN 演算法既可以處理分類問題,測試資料的型別由所有 K 個最近鄰點投票決定,也可以處理迴歸問題,測試資料的值是所有 K 個最近鄰點的值的均值或眾數.
KNN 的演算法非常簡單.
例如,對於分類問題,演算法流程如下,
對需要預測的每個資料依次執行以下操作:
- 計算已知訓練資料集中的點與當前點之間的距離;
- 按照距離遞增次序排序;
- 選取與當前點距離最小的k個點;
- 確定前k個點所在類別的出現頻率;
- 返回前k個點出現頻率最高的類別作為當前點的預測分類。
那麼KNN在實際使用中有哪些優點和缺點呢?
它的優點有:
- 可以處理線性和非線性資料
- 直觀上易於理解
- 具有較高的準確率
- 既可以用作迴歸問題,也可以用作分類問題
它的缺點是
- 計算代價大
- 記憶體要求高
- 資料量大時預測較慢
- 對無關的特徵以及特徵縮放敏感
在實際的使用過程中,可能會遇到如下的問題.
- k 近鄰的類別出現了平局的情況. 例如在二分類中,正負型別的近鄰數相同,使用奇數個近鄰可以解決此問題,但是無法解決多分類的問題.這個時候可以
- 隨機決定屬於哪個類別
- 對某些類別設定優先順序
- 使用最近鄰來做最終的決定
2.訓練資料的缺失值如何處理.如果不處理缺失值,則無法計算距離.對於缺失值的處理的核心原則是,儘可能小的影響距離的計算.一個合理的解決辦法是,使用訓練資料的平均值來填充缺失值.
最後附上實現程式碼,登入之後就能檢視了。 電腦端檢視原始碼
參考資料
- medium.com/@adi.bronsh…
- www.youtube.com/watch?v=DRI…
- www.datacamp.com/community/t…
- stats.stackexchange.com/questions/2…
———————————————————————————————————— Mo (網址:momodel.cn )是一個支援 Python 的人工智慧建模平臺,能幫助你快速開發訓練並部署 AI 應用。