1. 程式人生 > >K近鄰算法——KNN

K近鄰算法——KNN

依據 class info 文本 k近鄰算法 運行 res 排序 k近鄰

KNN(K-Nearest Neighbor)算法的核心思想是如果一個樣本在特征空間中的k個最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。該方法在確定分類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。所以比較特殊的是它不需要訓練,易於理解,易於實現。

在KNN中,通過計算對象間距離來作為各個對象之間的相似性指標,在這裏距離一般使用歐氏距離或曼哈頓距離:

技術分享圖片

整個KNN算法過程可以描述為:輸入測試數據,將測試數據的特征與訓練集中對應的特征進行相互比較,找到訓練集中與之最為相似的前K個數據,則該測試數據對應的類別就是K個數據中出現次數最多的那個分類,其算法的描述為:

計算測試數據與各個訓練數據之間的距離;

按照距離的遞增關系進行排序;

選取距離最小的K個點;

確定前K個點所在類別的出現頻率;

返回前K個點中出現頻率最高的類別作為測試數據的預測分類。

從KNN算法思想上思考,該算法在分類時有個主要的不足是,當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本占多數。該算法只計算"最近的"鄰居樣本,某一類的樣本數量很大,那麽或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響運行結果。但是本實驗有個缺陷是有個別類別的文本很少。所以有這樣一個缺點。另一個不足之處是計算量較大,因為對每一個待分類的文本都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。

K近鄰算法——KNN