機器學習 KNN最近鄰演算法

2021-10-01 09:28:51 字數 2319 閱讀 1927

k近鄰(k nearest neighbor,knn),可以做分類,也可以做回歸。

一、基本思想

給定一組訓練集,有乙個需要判斷類別的輸入例項,離輸入例項最近的k個訓練資料屬於哪個類別,就判斷輸入例項屬於哪個類別。

二、分類演算法描述:

1、計算輸入例項和所有訓練集資料的距離;

2、按距離公升序排序;

3、選擇排序後的前k個訓練子集資料;

4、根據選擇出來的k個訓練子集資料的類別,使用判別規則(一般是多數投票),**輸入例項的類別。

這樣實現也叫蠻力演算法,適合樣本量少的時候使用。

三、影響因素:

根據以上描述,我們可以歸納影響knn的主要因素:1、距離的度量 2、k值 3、判別規則。下面具體說下這3個因素是怎麼影響knn的。

距離的度量

計算2個n維資料點的距離公式,閔可夫斯基距離是最一般的形式:

其中,l 是資料點的特徵,因為資料點是n維的,所以l 能從1取到n,資料點xi和 xj 之間的距離就等於,xi 和 xj 每個特徵相減的絕對值的p次方,求和後開 p次根號。

一般,p 取1、2、∞。

p = 1,叫曼哈頓距離。

p = 2,叫歐式距離。

p = ∞,切比雪夫距離,注意一點的是這個距離的含義,他表示特徵差的最大值,不再是所有特徵差,只取最大的那個。至於為什麼是這樣,我還沒搞懂。

當然還有更多的求距離的公式,以後學了再新增。

值域變化大的特徵會對距離產生較大的影響,因此為了避免這種情況,需要對訓練資料做歸一化,縮小特徵的值域範圍。

k值k值過小過大都不好。

k值過小,鄰域小,**結果對鄰域裡的訓練資料非常敏感,容易造成過擬合。

k值過大,鄰域大,距離遠的訓練資料也會對**結果產生影響,極端值會影響**結果。

如何選擇合適的k值呢?通常使用交叉驗證。這個我還沒有深入了解。

決策規則

目前只見過一種投票,也叫多數表決。表示式:

這個表示式含義:鄰域中類別最多的類。或者是:

含義:鄰域中不等於類別的最小佔比,也叫損失,找最小損失。

上面2個表示式歸根到底是乙個意思,就是找鄰域中類別最多的類別,該類別就是**的結果。前面考慮的是距離近和距離遠的點對**結果產生一樣的影響,我們想想,距離近和遠應該是一樣的影響程度嗎?肯定不一樣。那怎麼合理解決呢?用加權投票,給距離近的點更大的權重,距離遠的點更小的權重,這樣**的結果會更合理一些。

四、優缺點

到這裡,歸納下knn的優缺點:

優點:思想簡單,理論成熟,既可以用來做分類又可以用來做回歸,

準確度高,對資料沒有假設,對離群值不敏感,

缺點:計算量大,需要大量記憶體,

樣本不平衡問題(有些類別樣本特別多,有些類別樣本很少)

五、kd樹

knn沒有顯式模型,每一次**都要用訓練資料計算一遍,如果訓練資料體量大的話,會比較慢。一種優化效率的方法,是把訓練資料儲存成kd樹。

1、kd樹的構建

根節點用方差最大的特徵。找到特徵的中位數,小於中位數的劃入左子樹,大於中位數的劃入右子樹,對於左右子樹,再選取方差最大的特徵當作節點,遞迴產生kd子樹。劃分出來的形狀是超矩形。

2、kd樹的搜尋

首先找到包含目標點的葉子結點,以目標點到葉子結點的距離為半徑,作超球體,最鄰點一定在這個超球體內。然後返回父節點,檢查另乙個子節點包含的超矩形體是否和超球體相交,如果相交,就到這個子節點尋找是否有最鄰點,有的話更新最鄰點。如果不相交,就返回父節點的父節點,在另乙個子樹裡搜尋最鄰點。當回到根節點時,演算法結束,此時最鄰點就是最終的最鄰點。

kd樹**

搜尋到第乙個最近鄰,然後依次剩餘k-1個最近鄰(已選的資料點要刪除不能再選)。如果是分類,就用投票法選擇類別,如果是回歸,就用平均值作為**結果。

六、優化

分組快速搜尋近鄰法

把訓練集

按近鄰關係分成組,給出每組質心的位置,以質心作為代表點,計算和輸入例項的距離,選出距離最近的乙個或若干個組,再在組內應用

knn。由於並不是計算輸入例項與所有訓練集資料的距離,故該改進演算法可以減少計算量,但並不能減少儲存量。

機器學習 KNN(最近鄰)詳解

k 近鄰演算法原理 k最近鄰 knn,k nearestneighbor 分類演算法,見名思意 找到最近的k個鄰居 樣本 在前k個樣本中選擇頻率最高的類別作為 類別。下面舉個例子,一下大家就會顯而易見了,如下圖 e.g 下圖中,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果k 3,由於紅...

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

一 knn k nearest neighbor 演算法原理 事物都遵循物以類聚的思想,即有相同特性的事物在特徵空間分布上會靠得更近,所以knn的思路是 乙個樣本在特徵空間中k個靠的最近的樣本中,大多數屬於某個類別,這個樣本就屬於某個類別。如圖所示,藍色方框和橙色三角分別代表不同的類別,此時來了乙個...

機器學習 kNN近鄰演算法

上圖中,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果k 3,由於紅色三角形所佔比例為2 3,綠色圓將被賦予紅色三角形那個類,如果k 5,由於藍色四方形比例為3 5,因此綠色圓被賦予藍色四方形類。k最近鄰 k nearest neighbor,knn 分類演算法,是乙個理論上比較成熟的方...