最簡單的機器學習算法——K-近鄰算法(K-Nearest Neighbor),縮寫KNN,通過計算距離來判定樣本是否所屬同一類。
K-NN的算法思想
算距離
給定測試對象 ????, 計算它與訓練集中每個對象的距離。依據公式計算 ???? 與 ?1 ,?2, … … ?j之間的相似度, 得到??? (????, ?1), ??? (????, ?2), ??? (????, ?j)。
找鄰居
圈定距離最近的k個訓練對象, 作爲測試對象的近鄰。將??? (????, ?1), ??? (????, ?2), ??? (????, ?j)排序, 若是超過相似度閾值?, 則放入鄰居集合??.
做分類
根據這k個近鄰歸屬的主要類別, 來對測試對象進行分類。自鄰居集合??中取出前k名, 查看它們的標籤, 對這k個點的標籤求和, 以多數決定, 得到????可能類別。
數學原理
K-NN涉及的數學原理只有距離公式,計算距離的方法很多,這裏採用歐氏距離。下圖給處理在二維、三維座標中的計算歐氏距離的表達式:
當特徵數量有很多個形成多維空間時, 再用上述的寫法就不方便了, 我們換一個寫法, 用 加下角標的方式表示特徵維度。 則在n維空間中, 有兩個點 和 , 它們的座標分別爲:
則 和 的歐氏距離表達式如下:
手稿
R | Python的實現
在R | Python 中 均可手動編程實現,也有對應的R第三方包來實現,Python中也有對應的第三方庫來實現。
#R代碼
library(class)
knn_model = knn(train,test,cl,k = i)
python代碼點我
後期抽時間補上R手動編程源碼。