演算法 K NN鄰近演算法

2021-10-10 05:30:09 字數 3724 閱讀 3559

(關注公zhong號:落葉歸根的豬。獲取資源,交個朋友~)

k - nearest neighbors

1. 基本概念與原理

k近鄰演算法是一種基本分類和回歸方法。knn演算法非常簡單且非常有效。knn的模型表示是整個訓練資料集。

該演算法的思想是:乙個樣本與資料集中的k個樣本最相似,如果這k個樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。

如上圖所示,有兩類不同的樣本資料,分別用藍色的小正方形和紅色的小三角形表示,而圖正中間的那個綠色的圓所標示的資料則是待分類的資料。這也就是我們的目的,來了乙個新的資料點,我要得到它的類別是什麼?

如果k=3,由於紅色三角形所佔比例為2/3,綠色圓將被賦予紅色三角形那個類,如果k=5,由於藍色四方形比例為3/5,因此綠色圓被賦予藍色四方形類。

由此也說明了knn演算法的結果很大程度取決於k的選擇

2. k值的影響

a. k值太小(k=1):過擬合。如上圖,若k太小,紅色則被分類為黑色,由這個處理過程我們很容易能夠感覺出問題了,如果k太小了,比如等於1,那麼模型就太複雜了,我們很容易學習到雜訊,也就非常容易判定為雜訊類別,而在上圖,如果,k大一點,k等於8,把長方形都包括進來,如下圖:

b. k值太大(k=n,n為樣本個數,很大):模型過於簡單。那麼無論輸入例項是什麼,都將簡單地**它屬於在訓練例項中最多的類。這時,模型非常簡單,因為根本就沒有訓練模型,直接用訓練資料統計資料類別然後分類,找到最大即可,如下圖:

我們統計了黑色圓形是8個,長方形個數是7個,那麼哈哈,如果k=n,我就得出結論了,紅色五邊形是屬於黑色圓形的

c. 理想k值:最理想的請看應該如下圖(下圖只有兩個feature,但是真實情況是會有很多維):

如何找到k值? —— 李航博士書上講到,我們一般選取乙個較小的數值,通常採取 交叉驗證法來選取最優的k值。(也就是說,選取k值很重要的關鍵是實驗調參,類似於神經網路選取多少層這種,通過調整超引數來得到乙個較好的結果

3. k值的確定:

在knn中,通過計算物件間距離來作為各個物件之間的非相似性指標,避免了物件之間的匹配問題,在這裡距離一般使用歐氏距離或曼哈頓距離:

多說一句:曼哈頓距離(manhattan distance):

曼哈頓距離是由十九世紀的赫爾曼·閔可夫斯基所創詞彙,是種使用在幾何度量空間的幾何學用語,用以標明兩個點在標準座標系上的絕對軸距總和。

圖中紅線代表曼哈頓距離,綠色代表歐氏距離,也就是直線距離,而藍色和黃色代表等價的曼哈頓距離。曼哈頓距離——兩點在南北方向上的距離加上在東西方向上的距離,即d(i,j)=|xi-xj|+|yi-yj|。對於乙個具有正南正北、正東正西方向規則布局的城鎮街道,從一點到達另一點的距離正是在南北方向上旅行的距離加上在東西方向上旅行的距離,因此,曼哈頓距離又稱為計程車距離。

如在平面上,座標(x1, y1)的i點與座標(x2, y2)的j點的曼哈頓距離為:

d(i,j)=|x1-x2|+|y1-y2|

二維平面兩點a(x1,y1)與b(x2,y2)間的曼哈頓距離

兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的曼哈頓距離

曼哈頓距離的乙個優點是計算速度快

(歐式距離不多說了,是我們以前初中學習的兩點距離)

4. 特徵歸一化

為什麼要特徵歸一化?—— 比如我們**房價,predicrtion是price,但是feature有很多,**可以是幾千幾萬(乙個feature),另乙個feature可以是面積,幾十幾百平方。所以資料不同feature之間需要正規化。

舉例如下,我用乙個人身高(cm)與腳碼(尺碼)大小來作為特徵值,類別為男性或者女性。我們現在如果有5個訓練樣本,分布如下:

a [(179,42),男] b [(178,43),男] c [(165,36)女] d [(177,42),男] e [(160,35),女]

通過上述訓練樣本,我們看出問題了嗎?

很容易看到第一維身高特徵是第二維腳碼特徵的4倍左右,那麼在進行距離度量的時候,我們就會偏向於第一維特徵。這樣造成倆個特徵並不是等價重要的,最終可能會導致距離計算錯誤,從而導致**錯誤。口說無憑,舉例如下:

現在我來了乙個測試樣本 f(167,43),讓我們來**他是男性還是女性,我們採取k=3來**。

下面我們用歐式距離分別算出f離訓練樣本的歐式距離,然後選取最近的3個,多數類別就是我們最終的結果,計算如下:

由計算可以得到,最近的前三個分別是c,d,e三個樣本,那麼由c,e為女性,d為男性,女性多於男性得到我們要**的結果為女性

這樣問題就來了,乙個女性的腳43碼的可能性,遠遠小於男性腳43碼的可能性,那麼為什麼演算法還是會**f為女性呢?那是因為由於各個特徵量綱的不同,在這裡導致了身高的重要性已經遠遠大於腳碼了,這是不客觀的。所以我們應該讓每個特徵都是同等重要的!這也是我們要歸一化的原因!歸一化公式如下:

5. 總結:

1.演算法的核心思想是,即是給定乙個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分類到這個類中。通俗說一遍演算法的過程,來了乙個新的輸入例項,我們算出該例項與每乙個訓練點的距離(這裡的複雜度為0(n)比較大,所以引出了下文的kd樹等結構),然後找到前k個,這k個哪個類別數最多,我們就判斷新的輸入例項就是哪類!

2.與該例項最近鄰的k個例項,這個最近鄰的定義是通過不同距離函式來定義,我們最常用的是歐式距離。

3.為了保證每個特徵同等重要性,我們這裡對每個特徵進行歸一化

4.k值的選取,既不能太大,也不能太小,何值為最好,需要實驗調整引數確定!

KNN演算法 鄰近演算法

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

KNN演算法(鄰近演算法)

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

knn鄰近演算法

knn演算法即為k鄰近演算法,是一種監督式的機器學習演算法,且它是用來進行分類的。注意此演算法需要和 k means演算法進行區別,因為都有個k。工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,且樣本集中每個資料都存在標籤,知道樣本集中與所屬分類的對應關係。輸入沒有定義的新資料後,將新資料的每個...