一仆嗦、定義
KNN全稱K Near Neighbor,意思是k個最近的鄰居先壕,即每個樣本都可以用它最接近的k個鄰居來代表瘩扼。
如下圖,在K=1的范圍內(nèi)垃僚,目標點應(yīng)該標為紅色的正方形集绰,在k=5的范圍內(nèi),目標點應(yīng)該標為藍色的三角形谆棺。
二栽燕、算法過程
1) 計算已知類別數(shù)據(jù)集中的點與當前點之間的距離
2) 按距離遞增次序排序
3) 選取與當前點距離最小的k個點
4) 統(tǒng)計前k個點所在的類別出現(xiàn)的頻率
5) 返回前k個點出現(xiàn)頻率最高的類別作為當前點的預(yù)測分類
那么這個算法的最重要的一點就是如何選取合適的k了
如果選擇較小的K值,就相當于用較小的鄰域中的訓(xùn)練實例進行預(yù)測改淑,學習的近似誤差會減小碍岔,只有與輸入實例較近的訓(xùn)練實例才會對預(yù)測結(jié)果起作用,單缺點是學習的估計誤差會增大朵夏,預(yù)測結(jié)果會對近鄰的實例點分成敏感蔼啦。如果鄰近的實例點恰巧是噪聲,預(yù)測就會出錯仰猖。換句話說捏肢,K值減小就意味著整體模型變復(fù)雜,分的不清楚饥侵,就容易發(fā)生過擬合鸵赫。
如果選擇較大K值,就相當于用較大鄰域中的訓(xùn)練實例進行預(yù)測爆捞,其優(yōu)點是可以減少學習的估計誤差奉瘤,但近似誤差會增大,也就是對輸入實例預(yù)測不準確煮甥,K值得增大就意味著整體模型變的簡單
ps:
(1)近似誤差:可以理解為對現(xiàn)有訓(xùn)練集的訓(xùn)練誤差盗温。
近似誤差關(guān)注訓(xùn)練集,如果k值小了會出現(xiàn)過擬合的現(xiàn)象卖局,對現(xiàn)有的訓(xùn)練集能有很好的預(yù)測,但是對未知的測試樣本將會出現(xiàn)較大偏差的預(yù)測砚偶。模型本身不是最接近最佳模型。
(2)估計誤差:可以理解為對測試集的測試誤差染坯。
估計誤差關(guān)注測試集均芽,估計誤差小了說明對未知數(shù)據(jù)的預(yù)測能力好。模型本身最接近最佳模型单鹿。
在應(yīng)用中掀宋,K值一般取一個比較小的數(shù)值,通常采用交叉驗證法來選取最優(yōu)的K值劲妙。
三、優(yōu)缺點
1儒喊、簡單有效
2镣奋、重新訓(xùn)練代價低
3、算法復(fù)雜度低
4怀愧、適合類域交叉樣本
5侨颈、適用大樣本自動分類
缺點:
1掸驱、惰性學習
2、類別分類不標準化
3毕贼、輸出可解釋性不強
4、不均衡性
5陶贼、計算量較大