knn演算法是選擇與輸入樣本在特徵空間內最近鄰的k個訓練樣本並根據一定的決策規則給出輸出結果。
決策規則:
分類任務:輸出結果為k個訓練樣本中佔大多數的類。
回歸任務:輸出結果為k個訓練樣本值的平均值。
如下圖的分類任務,輸出結果為w1類。
k值的選擇、距離度量和分類決策規則是k近鄰演算法的三個基本要素。
分類決策規則:
knn演算法一般是用多數表決方法,即由輸入例項的k個近鄰的多數聚類決定輸入例項的類。這種思想也是經驗風險最小化的結果。
訓練樣本為(xi,yi)。當輸入例項為x,標記為c,nk(x)是輸入例項x的k近鄰訓練樣本集。
我們定義訓練誤差率是k近鄰訓練樣本標記與輸入標記不一致的比例,誤差率表示為:
因此,要使誤差率最小化即經驗風險最小,就要使上式中右端的
k值的選擇:
k取值較小時,模型複雜度高,訓練誤差會減小,泛化能力減弱;k取值較大時,模型複雜度低,訓練誤差會增大,泛化能力有一定的提高。
knn模型的複雜度可以通過對雜訊的容忍度來理解,若模型對雜訊很敏感,則模型的複雜度高;反之,模型的複雜度低。為了更好理解模型複雜度的含義,我們取乙個極端,分析k=1和k=「樣本值」的模型複雜度。
由上圖可知,k=1時,模型輸出的結果受雜訊的影響很大。
由上圖可知,樣本數等於7,當k=7時,不管輸入資料的雜訊有多大,輸出結果都是綠色類,模型對雜訊極不敏感,但是模型太過簡單,包含的資訊太少,也是不可取的。
通過上面兩種極端的k選取結果可知,k值選擇應適中,k值一般小於20,建議採用交叉驗證的方法取合適的k值。
距離度量:
knn演算法用距離來度量兩個樣本間的相似度,常用的距離表示方法:
歐式距離:
曼哈頓距離:
閔可夫斯基距離:
可以看出,歐式距離是閔可夫斯基距離在p=2時的特例,而曼哈頓距離是p=1時的特例。
暴力搜尋(brute-force search)是線性掃瞄輸入例項與每乙個訓練例項的距離並選擇前k個最近鄰的樣本來多數表決,演算法簡單,但是當訓練集或特徵維度很大時,計算非常耗時,故這種暴力實現原理是不可行的。
kd數是一種對k維空間中的例項點進行儲存以便對其進行快速檢索的樹形資料結構,構造kd樹相當於不斷用垂直於座標軸的超平面將k維空間進行劃分,構成一系列的k維超矩形區域,kd數省去了對大部分資料的搜尋,大大的減少了計算量。
kd數的knn演算法實現包括三部分:kd樹的構建,kd樹的搜尋和kd樹的分類。
1. 構建kd樹:
kd樹實質是二叉樹,其劃分思想與cart樹一致,即切分使樣本複雜度降低最多的特徵。
kd數認為特徵方差越大,則該特徵的複雜度亦越大,優先對該特徵切分,切分點是所有例項在該特徵的中位數。重複該切分步驟,直到切分後無樣本則終止切分,終止時的樣本為葉節點。
【例】給定乙個二維空間的資料集:
構造kd樹的步驟:
(1)、資料集在維度x1和x2的方差分別為6.9和5.3,因此首先從x1維度進行切分。
(2)、資料集在x1維度的中位數是7,以平面x1=7將空間分為左右兩個矩形。
(3)、分別對左右兩個矩形的樣本在x2維度的中位數進行切分。
(4)、重複步驟(2)(3),直到無樣本,該節點為葉子節點。
如下圖,綠色為葉子節點,紅色為節點和根節點。
2. kd樹搜尋:
(1)、搜尋路徑從根節點到葉節點,在kd樹裡面找到包含目標點的葉子結點。
(2)、搜尋路徑從葉節點到根節點,找到距離目標點最近的樣本例項點。
3. kd樹**:
每一次搜尋與輸入樣本最近的樣本節點,然後忽略該節點,重複同樣步驟k次,找到與輸入樣本最近鄰的k個樣本,投票法確定輸出結果。
若正負樣本處於不平衡狀態,運用投票決策的knn演算法判斷輸入樣本的所屬類別:
結果顯示輸入樣本為綠色類,院長是紅色類個數遠小於綠色類,導致出現分類錯誤。
(1)若分類決策選擇限定半徑最近鄰法,即以輸出樣本為圓心最大半徑r的圓內選擇出現次數最多的類作為輸入樣本的類,如下圖,黑色樣本的分類結果正確。
(2)投票法是預設每個樣本的權重相等,我們假定權重與距離成反比,即距離越大,對結果影響越小,那麼該樣本的權重也越小,反之,權重則越大,根據權重對輸入樣本進行分類。這種思想與adaboost演算法相似,分類效能好的弱分類器給予乙個大的權重。
分類過程:
(1)、選擇與輸入樣本距離x0最近的k個訓練xi(i = 1,2,…,k),d(x0, x1)表示輸入樣本和訓練樣本的距離。
(2)、根據距離與樣本成反比的性質將距離轉化成權重wi,wi表示輸入樣本x0與訓練樣本xi的權重。
(3)、我們累加每一類的樣本權重,並認為該權重佔所有權權重和比例是該類的生成概率,概率最大的類就是輸入樣本的分類結果。
假設目標是二分類(c1, c2),表示式:
若回歸過程:
(1)(2)過程與分類過程一致,(3)則使用如下表示式得到回歸值:
其中,y為輸出結果,f(xi)為最近鄰樣本的值。若權重相同的話,則輸出結果為k個訓練樣本的平均值。
用權重思想重新對上例進行分類,可得輸入樣本為紅色類。
優點:
(1)演算法簡單,理論成熟,可用於分類和回歸。
(2)對異常值不敏感。
(3)可用於非線性分類。
(4)比較適用於容量較大的訓練資料容量較小的訓練資料則很容易出現誤分類情況。
(5)knn演算法原理是根據鄰域的k個樣本來確定輸出類別,因此對於不同類的樣本集有交叉或重疊較多的待分樣本集來說,knn方法較其他方法更為適合。
缺點:
(1)時間複雜度和空間複雜度高。
(2)訓練樣本不平衡,對稀有類別的**準確率低。
(3)相比決策樹模型,knn模型可解釋性不強。
K 近鄰演算法 KNN
knn k nearest neighbor 假設訓練集有記錄 r1 r2,rn共n條,訓練集的特徵向量及其對應的類別都是已知的,每個記錄的特徵向量為 t1 t2,tk共k個特徵,待測試的記錄為ru 1 計算ru 的特徵向量與訓練集的每條記錄 即r1 r2,rn 的特徵向量的歐式距離,選取距離最小的...
k近鄰演算法 kNN
核心思想 前k個最相似資料中出現次數最多的類別,作為新資料的類別。核心函式 計算距離函式,投票函式 coding utf 8 import random import sys from collections import counter from operator import itemgette...
K近鄰演算法 KNN
k近鄰演算法 knn 何謂k近鄰演算法,即k nearest neighbor algorithm,簡稱knn演算法,單從名字來猜想,可以簡單粗暴的認為是 k個最近的鄰居,當k 1時,演算法便成了最近鄰演算法,即尋找最近的那個鄰居。為何要找鄰居?打個比方來說,假設你來到乙個陌生的村莊,現在你要找到與...