K近鄰算法(K-nearest Neighbor,簡稱KNN)
KNN是種最簡單的機(jī)器學(xué)習(xí)算法了,結(jié)合書本定義和自我理解,K近鄰算法的原理是:
對于新的測試數(shù)據(jù)集,使用某種距離度量找出在訓(xùn)練集中最為接近的K個訓(xùn)練樣本。
- 在分類任務(wù)中,使用“投票法”:選擇K個樣本實(shí)際值中出現(xiàn)最多次數(shù)的值作為預(yù)測結(jié)果。
- 在回歸任務(wù)中,使用“平均法”:選擇K個樣本實(shí)際值的平均值作為預(yù)測結(jié)果。
實(shí)際上K近鄰學(xué)習(xí)是懶惰學(xué)習(xí)(lazy learning)的一種,在訓(xùn)練階段僅保存樣本數(shù)據(jù),訓(xùn)練開銷時間為0,有了測試樣本數(shù)據(jù)后再進(jìn)行學(xué)習(xí)處理。與之對應(yīng)的是在訓(xùn)練階段就要處理數(shù)據(jù)的方法,稱為急切學(xué)習(xí)(eager learning)
通過一個簡單對比示例來說明吧,show me the code~.
#近鄰選擇K=1
mglearn.plots.plot_knn_classification(n_neighbors=1)
plt.title("K=1")

image.png
#近鄰選擇K=3
mglearn.plots.plot_knn_classification(n_neighbors=3)
plt.title("K=3")

image.png
mglearn.plots.plot_knn_classification(n_neighbors=4)
plt.title("K=4")

image.png
通過對比以上K取值(1,3,4)時,對應(yīng)測試數(shù)據(jù)(三個五角星)的顏色取值即可發(fā)現(xiàn)KNN的算法效果。
即:對于分類任務(wù),使用投票法選擇測試數(shù)據(jù)的K個近鄰數(shù)據(jù)中出現(xiàn)頻數(shù)最大的值作為預(yù)測值。
寫此文的時候發(fā)現(xiàn),開始掉頭發(fā)了,果然這玩意很燒腦。o(╥﹏╥)o