分類演算法 k近鄰演算法

2021-09-07 07:49:43 字數 2074 閱讀 8649

k最近鄰(k-nearest neighbor,knn)分類演算法,是乙個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。

用官方的話來說,所謂k近鄰演算法,即是給定乙個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的k個例項(也就是上面所說的k個鄰居), 這k個例項的多數屬於某個類,就把該輸入例項分類到這個類中。根據這個說法,咱們來看下引自維基百科上的一幅圖:

如 上圖所示,有兩類不同的樣本資料,分別用藍色的小正方形和紅色的小三角形表示,而圖正中間的那個綠色的圓所標示的資料則是待分類的資料。也就是說,現在, 我們不知道中間那個綠色的資料是從屬於哪一類(藍色小正方形or紅色小三角形),下面,我們就要解決這個問題:給這個綠色的圓分類。   我們常說,物以類聚,人以群分,判別乙個人是乙個什麼樣品質特徵的人,常常可以從他/她身邊的朋友入手,所謂觀其友,而識其人。我們不是要判別上圖中那個綠色的圓是屬於哪一類資料麼,好說,從它的鄰居下手。但一次性看多少個鄰居呢?從上圖中,你還能看到:

於此我們看到,當無法判定當前待分類點是從屬於已知分類中的哪一類時,我們可以依據統計學的理論看它所處的位置特徵,衡量它周圍鄰居的權重,而把它歸為(或分配)到權重更大的那一類。這就是k近鄰演算法的核心思想。

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

knn 演算法本身簡單有效,它是一種 lazy-learning 演算法,分類器不需要使用訓練集進行訓練,訓練時間複雜度為0。knn 分類的計算複雜度和訓練集中的文件數目成正比,也就是說,如果訓練集中文件總數為 n,那麼 knn 的分類時間複雜度為o(n)。

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

k 近鄰演算法使用的模型實際上對應於對特徵空間的劃分。k 值的選擇,距離度量和分類決策規則是該演算法的三個基本要素:

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

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

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

knn演算法不僅可以用於分類,還可以用於回歸。通過找出乙個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的

權值(weight),如權值與距離成反比。 該演算法在分類時有個主要的不足是,當樣本不平衡時,如乙個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入乙個新樣本時,該樣本的k個鄰居中大容量類的樣本占多數。 該演算法只計算「最近的」鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響執行結果。可以採用權值的方法(和該樣本距離小的鄰居權值大)來改進。

該方法的另乙個不足之處是計算量較大,因為對每乙個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的k個最近鄰點。目前常用的解決方法是事先對已知

樣本點進行剪輯,事先去除對分類作用不大的樣本。該演算法比較適用於

樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種演算法比較容易產生誤分。

實現 k 近鄰演算法時,主要考慮的問題是如何對訓練資料進行快速 k 近鄰搜尋,這在特徵空間維數大及訓練資料容量大時非常必要。

分類演算法 K 近鄰演算法

如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。兩個樣本的距離可以通過如下公式計算,又叫歐式距離 案例 from sklearn.datasets import load iris from sklearn.model selecti...

K近鄰(KNN) 分類演算法

k近鄰 knn 分類演算法 knn是non parametric分類器 不做分布形式的假設,直接從資料估計概率密度 是memory based learning.knn不適用於高維資料 curse of dimension machine learning的python庫很多,比如mlpy 更多pa...

K近鄰分類演算法實現 in Python

k近鄰 knn 分類演算法 knn是non parametric分類器 不做分布形式的假設,直接從資料估計概率密度 是memory based learning.knn不適用於高維資料 curse of dimension machine learning的python庫很多,比如mlpy 更多pa...