kNN(K-Nearest Neighbor)最鄰近規則分類

KNN最鄰近規則,主要應用領域是對未知事物的識別,即判斷未知事物屬於哪一類,判斷思想是,基於歐幾里得定理,判斷未知事物的特徵和哪一類已知事物的的特徵最接近;算法

K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:若是一個樣本在特徵空間中的k個最類似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。KNN算法中,所選擇的鄰居都是已經正確分類的對象。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。 KNN方法雖然從原理上也依賴於極限定理,但在類別決策時,只與極少許的相鄰樣本有關。因爲KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來肯定所屬類別的,所以對於類域的交叉或重疊較多的待分樣本集來講,KNN方法較其餘方法更爲適合。
  KNN算法不只能夠用於分類,還能夠用於迴歸。經過找出一個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就能夠獲得該樣本的屬性。更有用的方法是將不一樣距離的鄰居對該樣本產生的影響給予不一樣的權值(weight),如權值與距離成正比(組合函數)。
  該算法在分類時有個主要的不足是,當樣本不平衡時,如一個類的樣本容量很大,而其餘類樣本容量很小時,有可能致使當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。 該算法只計算「最近的」鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。不管怎樣,數量並不能影響運行結果。能夠採用權值的方法(和該樣本距離小的鄰居權值大)來改進。該方法的另外一個不足之處是計算量較大,由於對每個待分類的文本都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。目前經常使用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類做用不大的樣本。該算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種算法比較容易產生誤分。機器學習

K-NN能夠說是一種最直接的用來分類未知數據的方法。基本經過下面這張圖跟文字說明就能夠明白K-NN是幹什麼的函數

簡單來講,K-NN能夠當作:有那麼一堆你已經知道分類的數據,而後當一個新數據進入的時候,就開始跟訓練數據裏的每一個點求距離,而後挑離這個訓練數據最近的K個點看看這幾個點屬於什麼類型,而後用少數服從多數的原則,給新數據歸類。學習

 

算法步驟:.net

step.1---初始化距離爲最大值rest

step.2---計算未知樣本和每一個訓練樣本的距離dist對象

step.3---獲得目前K個最臨近樣本中的最大距離maxdistget

step.4---若是dist小於maxdist,則將該訓練樣本做爲K-最近鄰樣本ast

step.5---重複步驟二、三、4,直到未知樣本和全部訓練樣本的距離都算完class

step.6---統計K-最近鄰樣本中每一個類標號出現的次數

step.7---選擇出現頻率最大的類標號做爲未知樣本的類標號

 

R語言的實現代碼以下

library(class) data(iris) names(iris) m1<-knn.cv(iris[,1:4],iris[,5],k=3,prob=TRUE) attributes(.Last.value) library(MASS) m2<-lda(iris[,1:4],iris[,5])  與判別分析進行比較 b<-data.frame(Sepal.Length=6,Sepal.Width=4,Petal.Length=5,Petal.Width=6) p1<-predict(m2,b,type="class")

相關文章
相關標籤/搜索