分類演算法之鄰近演算法 KNN(理論篇)

2021-09-14 04:45:35 字數 1523 閱讀 1232

今天介紹另一種分類演算法,k鄰近演算法(k-nearest neighbors),即 knn 演算法。

cover 和 hart 在 1968 年提出了最初的鄰近演算法,用於解決分類(classification)的問題。關於這個演算法在維基百科中也有介紹:

。knn是一種基於例項學習(instance-based learning),或者所是將所有計算推遲到分類之後的惰性學習(lazy learning)的一種演算法,knn是所有機器學習演算法中最簡單演算法之一。

乙個有關電影分類的例子:

這個乙個根據打鬥次數和接吻次數作為特徵來進行型別的分類。最後一條的記錄就是待分類的資料。

knn這個分類過程比較簡單的乙個原因是它不需要建立模型,也不需要進行訓練,並且非常容易理解。把例子中打鬥次數和接吻次數看成是x軸和y軸,那麼就很容易能建立乙個二維座標,每條記錄都是座標中的點。對於未知點來說,尋找其最近的幾個點,哪種分類數較多,未知點就屬於哪一類。

knn演算法的思路是: 如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。通常 k 的取值比較小,不會超過 20。

演算法步驟為:

關於距離的測量方式有多種,這裡只介紹兩種。

尤拉距離

這種測量方式就是簡單的平面幾何中兩點之間的直線距離。

並且這種方法可以延伸至三維或更多維的情況。它的公式可以總結為:

$$ d(x,y) = \sqrt^n(x_i-y_i)^2} $$

曼哈頓距離

顧名思義,城市街區的距離就不能是點和點的直線距離,而是街區的距離。如棋盤上也會使用曼哈頓距離的計算方法:

$$ d(x,y) = \sqrt^n|x_i-y_i|} $$

k值的選擇會影響結果,有乙個經典的圖如下:

圖中的資料集是良好的資料,即都打好了label,一類是藍色的正方形,一類是紅色的三角形,那個綠色的圓形是待分類的資料。

如何選擇乙個最佳的k值取決於資料。一般情況下,在分類時較大的 k 值能夠減小雜訊的影響,但會使類別之間的界限變得模糊。因此 k 的取值一般比較小 (k < 20)。

在下面一種情況中:

在點y的**中,改範圍內三角形分類數量佔優,因此將y點歸為三角形。但是從視覺上觀測,應該是分為圓形分類更為合理。根據這種情況就在距離測量中加上權重,比如1/d(d: 距離)。

優點: 缺點:

分類演算法之鄰近演算法 KNN(應用篇)

這次使用的訓練集由sklearn模組提供,關於虹膜 一種鳶尾屬植物 的資料。資料儲存在.data成員中,它是乙個 n samples,n features numpy陣列 print iris.data 5.1 3.5 1.4 0.2 4.9 3.1.4 0.2 它有四個特徵,萼片長度,萼片寬度,花...

KNN演算法 鄰近演算法

knn演算法是機器學習裡面比較簡單的乙個分類演算法了,整體思想比較簡單 計算乙個點a與其他所有點之間的距離,取出與該點最近的k個點,然後統計這k個點裡面所屬分模擬例最大的,則點a屬於該分類。這樣講可能還有點迷糊,下面用乙個例子來說明一下 電影名稱 打鬥次數 接吻次數 電影型別 california ...

KNN演算法(鄰近演算法)

鄰近演算法 或者說k最近鄰 knn,k nearestneighbor 分類演算法是 資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。knn演算法的核心思想 是如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類...