機器學習 KNN K 最鄰近演算法

2022-08-15 05:39:18 字數 2816 閱讀 6045

knn分類演算法,是理論上比較成熟的方法,也是最簡單的機器學習演算法之一。

該方法的思路是:如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。

knn演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分樣本所屬的類別。

乙個對於knn演算法解釋最清楚的圖如下所示:

藍方塊和紅三角均是已有分類資料,當前的任務是將綠色圓塊進行分類判斷,判斷是屬於藍方塊或者紅三角。

當然這裡的分類還跟k值是有關的:

如果k=3(實線圈),紅三角佔比2/3,則判斷為紅三角;

如果k=5(虛線圈),藍方塊佔比3/5,則判斷為藍方塊。

由此可以看出knn演算法實際上根本就不用進行訓練,而是直接進行計算的,訓練時間為0,計算時間為訓練集規模n。

knn演算法的基本要素大致有3個:

1、k 值的選擇

2、距離的度量

3、分類決策規則

k 值會對演算法的結果產生重大影響。k值較小意味著只有與輸入例項較近的訓練例項才會對**結果起作用,容易發生過擬合;如果 k 值較大,優點是可以減少學習的估計誤差,缺點是學習的近似誤差增大,這時與輸入例項較遠的訓練例項也會對**起作用,是**發生錯誤。在實際應用中,k 值一般選擇乙個較小的數值,通常採用交叉驗證的方法來選擇最有的 k 值。隨著訓練例項數目趨向於無窮和 k=1 時,誤差率不會超過貝葉斯誤差率的2倍,如果k也趨向於無窮,則誤差率趨向於貝葉斯誤差率。

演算法中的分類決策規則往往是多數表決,即由輸入例項的 k 個最臨近的訓練例項中的多數類決定輸入例項的類別

距離度量一般採用 lp 距離,當p=2時,即為歐氏距離,在度量之前,應該將每個屬性的值規範化,這樣有助於防止具有較大初始值域的屬性比具有較小初始值域的屬性的權重過大。

knn演算法在分類時主要的不足是,當樣本不平衡時,如果乙個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入乙個新樣本時,該樣本的 k 個鄰居中大容量類的樣本占多數。

演算法偽**:

1

搜尋k近鄰的演算法:knn(a[n],k)23

#輸入:a[n]為n個訓練樣本在空間中的座標,k為近鄰數4#

輸出:x所屬的類別

56 取a[1]~a[k]作為x的初始近鄰,計算與測試樣本x間的歐式距離d(x,a[i]),i=1,2,.....,k;

7按d(x,a[i])公升序排序;

8 取最遠樣本距離d = max;910

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

繼續計算剩下的n-k個資料的歐氏距離

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

12if(d(x,a[i]))

13 then 用a[i]代替最遠樣本#

將後面計算的資料直接進行插入即可

1415

最後的k個資料是有大小順序的,再進行k個樣本的統計即可

16 計算前k個樣本a[i]),i=1,2,..,k所屬類別的概率;

17 具有最大概率的類別即為樣本x的類

python 函式:

1

#knn-k-最臨近演算法2#

inx為待分類向量,dataset為訓練資料集3#

labels為訓練集對應分類,k最鄰近演算法

4def

classify0(inx, dataset, labels, k):

5 datasetsize = dataset.shape[0]#

獲得dataset的行數

67 diffmat = np.tile(inx, (datasetsize,1)) - dataset#

對應的差值

8 sqdiffmat = diffmat**2 #

差的平方

9 sqdistances = sqdiffmat.sum(axis=1) #

差的平方的和

10 distances = sqdistances**0.5 #

差的平方的和的平方根11#

計算待分類向量與每乙個訓練資料集的歐氏距離

1213 sorteddistindicies = distances.argsort() #

排序後,統計前面k個資料的分類情況

1415 classcount={}#

字典16

for i in

range(k):

17 voteilabel = labels[sorteddistindicies[i]]#

labels得是字典才可以如此

18 classcount[voteilabel] = classcount.get(voteilabel,0) + 1

1920 sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)#

再次排序

2122

return sortedclasscount[0][0]#

第乙個就是最多的類別

最後針對於k值的選取,做最後的總結:

機器學習 KNN K 最鄰近演算法

k 近鄰學習是一種常用的監督學習方法,比如 判斷乙個人的人品,只需要觀察與他來往最密切的幾個人的人品好壞就可以得出,即 近朱者赤,近墨者黑 理論 原理 物以類聚,人以群分 乙個對於knn演算法解釋最清楚的圖如下所示 藍方塊和紅三角均是已有分類資料,當前的任務是將綠色圓塊進行分類判斷,判斷是屬於藍方塊...

機器學習演算法之 KNN k鄰近演算法

k 鄰近演算法應該是機器學習中最簡單的演算法了,也很容易理解。場景 已知一組資料 點 並按照某些屬性對其進行了分類,比如 a,b,c,這就是資料的labels 對於新來的資料,已知其屬性,對其進行分類,加label。k近鄰對於如何分類的做法就是,根據屬性,1.求出未知點到已知所有點的距離 2.對所有...

機器學習演算法之 kNN k 鄰近演算法

knn 演算法 k 臨近演算法,最基本的機器學習演算法之一,簡單講就是已有標本資料,計算 的資料和每個標本資料的特徵距離 如歐氏距離 距離近的標本資料型別作為 資料的型別。原理 已有訓練樣本集,新的資料和訓練樣本特徵比較,訓練樣本集中取特徵最相似資料的標籤。一般來說先找前k個最相似的 資料,這就是k...