簡述KNN演算法

2021-09-26 04:49:11 字數 2263 閱讀 7643

knn:如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最近鄰)的樣本中的大多數屬於某乙個類別,即該樣本也屬於這個類別。

1)計算已知類別資料集中的點與當前點的距離;

2)按距離遞增次序排序;

3)選取與當前點距離最小的k個點;

4)統計前k個點所在的類別出現的頻率;

5)返回前k個點出現頻率最高的類別作為當前點的**分類;

x = [[0], [1], [2], [3]]

y = [0, 0, 1, 1]

from sklearn.neighbors import kneighborsclassifier

# 例項化api

estimator = kneighborsclassifier(n_neighbors=2)

# 使用fit方法進行訓練

estimator.fit(x, y)

estimator.predict([[1]])

k值選擇問題,李航博士的一書「統計學習方法」上所說:

1)選擇較小的k值,就相當於用較小的領域中的訓練例項進行**,「學習」近似誤差會減小,只有與輸入例項較近或相似的訓練例項才會對**結果起作用,與此同時帶來的問題是「學習」的估計誤差會增大,換句話說,k值的減小就意味著整體模型變得複雜,容易發生過擬合;

2)選擇較大的k值,就相當於用較大領域中的訓練例項進行**,其優點是可以減少學習的估計誤差,但缺點是學習的近似誤差會增大。這時候,與輸入例項較遠(不相似的)訓練例項也會對**器作用,使**發生錯誤,且k值的增大就意味著整體的模型變得簡單。

在實際應用中,k值一般取乙個比較小的數值,例如採用交叉驗證法(簡單來說,就是把訓練資料在分成兩組:訓練集和驗證集)來選擇最優的k值。

近似誤差:

估計誤差:

k值過小

k值過大

問題匯入:實現k近鄰演算法時,主要考慮的問題是如何對訓練資料進行快速k近鄰搜尋。

k近鄰法最簡單的實現是線性掃瞄(窮舉搜尋),即要計算輸入例項與每乙個訓練例項的距離。計算並儲存好以後,再查詢k近鄰。當訓練集很大時,計算非常耗時。

kd樹:為了避免每次都重新計算一遍距離,演算法會把距離資訊儲存在一棵樹裡,這樣在計算之前從樹裡查詢距離資訊,盡量避免重新計算。其基本原理是,如果a和b距離很遠,b和c距離很近,那麼a和c的距離也很遠。有了這個資訊,就可以在合適的時候跳過距離遠的點。

給定乙個二維空間資料集:t=,構造乙個平衡kd樹。

思路引導

根結點對應包含資料集t的矩形,選擇x(1)軸,6個資料點的x(1)座標中位數是6,這裡選最接近的(7,2)點,以平面x(1)=7將空間分為左、右兩個子矩形(子結點);接著左矩形以x(2)=4分為兩個子矩形(左矩形中點的x(2)座標中位數正好為4),右矩形以x(2)=6分為兩個子矩形,如此遞迴,最後得到如下圖所示的特徵空間劃分和kd樹。

查詢點(2,4.5)

1)、在(7,2)處測試到達(5,4),在(5,4)處測試到達(4,7)【優先選擇在本域搜尋】,然後search_path中的結點為,從search_path中取出(4,7)作為當前最佳結點nearest, dist為3.202;

2)、然後回溯至(5,4),以(2,4.5)為圓心,以dist=3.202為半徑畫乙個圓與超平面y=4相交,所以需要跳到(5,4)的左子空間去搜尋。所以要將(2,3)加入到search_path中,現在search_path中的結點為;另外,(5,4)與(2,4.5)的距離為3.04 < dist = 3.202,所以將(5,4)賦給nearest,並dist=3.04;

3)、回溯至(2,3),(2,3)是葉子節點,直接平判斷(2,3)是否離(2,4.5)更近,計算得到距離為1.5,所以nearest更新為(2,3),dist更新為(1.5);

4)、回溯至(7,2),同理,以(2,4.5)為圓心,以dist=1.5為半徑畫乙個圓並不和超平面x=7相交, 所以不用跳到結點(7,2)的右子空間去搜尋;

至此,search_path為空,結束整個搜尋,返回nearest(2,3)作為(2,4.5)的最近鄰點,最近距離為1.5。

KNN演算法的簡述

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

簡述KNN演算法及實現

numpy中shape 0 返回陣列的行數,shape 1 返回列數 datasetsize dataset.shape 0 將intx在橫向重複datasetsize次,縱向重複1次 例如intx 1,2 1,2 1,2 1,2 1,2 便於後面計算 diffmat np.tile intx,da...

KNN演算法 鄰近演算法

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