K-最鄰近算法總結


1.基本介紹

     K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。KNN算法中,所選擇的鄰居都是已經正確分類的對象。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。 

      KNN方法雖然從原理上也依賴於極限定理,但在類別決策時,只與極少量的相鄰樣本有關。由於KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。

      KNN算法不僅可以用於分類,還可以用於回歸。通過找出一個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的權值(weight),如權值與距離成正比

  該算法在分類時有個主要的不足是,當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本占多數。 該算法只計算“最近的”鄰居樣本,某一類的樣本數量很大,那么或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響運行結果。可以采用權值的方法(和該樣本距離小的鄰居權值大)來改進。該方法的另一個不足之處是計算量較大,因為對每一個待分類的文本都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本。該算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域采用這種算法比較容易產生誤分。

 

2.算法描述

       K-近鄰算法的思想如下:首先,計算新樣本與訓練樣本之間的距離,找到距離最近的K個鄰居;然后,根據這些鄰居所屬的類別來判定新樣本的類別,如果它們都屬於同一個類別,那么新樣本也屬於這個類;否則,對每個后選類別進行評分,按照某種規則確定新樣本的類別。

       取未知樣本X的K個近鄰,看着K個近鄰多數屬於哪一類,就把X分為哪一類。即,在X的K個樣本中,找出X的K個近鄰。K-近鄰算法從測試樣本X開始生長,不斷的擴大區域,直到包含進K個訓練樣本,並且把測試樣本X的類別歸為着最近的K個訓練樣本中出現頻率最大的類別。例如,下圖圖中綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果K=3,由於紅色三角形所占比例為2/3,綠色圓將被賦予紅色三角形那個類,如果K=5,由於藍色四方形比例為3/5,因此綠色圓被賦予藍色四方形類

算法偽代碼:

搜索k個近鄰的算法:kNN(A[n],k)

輸入:A[n]為N個訓練樣本在空間中的坐標,k為近鄰數

輸出:x所屬的類別

取A[1]~A[k]作為x的初始近鄰,計算與測試樣本x間的歐式距離d(x,A[i]),i=1,2,.....,k;按d(x,A[i])升序排序,計算最遠樣本與x間的距離D<-----max{d(x,a[j]) | j=1,2,.....,k};

  for(i=k+1;i<=n;i++)

       計算a[i]與x間的距離d(x,A[i]);

       if(d(x,A[i]))<D

              then 用A[i]代替最遠樣本

     按照d(x,A[i])升序排序,計算最遠樣本與x間的距離D<---max{d(x,A[j]) | j=1,...,i };計算前k個樣本A[i]),i=1,2,...,k所屬類別的概率,具有最大概率的類別即為樣本x的類

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM