knn演算法假設給定的訓練集中的例項都已經分好類了,對於新的例項,根據離它最近的k個訓練例項的類別來**它的類別。即這k個例項大多數屬於某個類別則該例項就屬於某個類別。比如k為5,離新例項a最近的5個樣本的情況為,3個樣本屬於a類,1個樣本屬於b類,乙個樣本屬於c類,那麼新例項a屬於a類。
k值的選取可能會影響到分類結果,如下圖,k=3和k=5時的分類結果是不同的。
k值小可能會導致**結果對近鄰的樣本點敏感,如果剛好是噪音則會導致**結果出錯,容易發生過擬合。近似誤差小,估計誤差大。
k值大可能會導致較遠的樣本也影響**,也可能會導致**錯誤。近似誤差大,估計誤差小。
k值一般先取較小的數,再用交叉驗證方法選擇最優k值。
兩種方式:線性掃瞄和kd樹。
knn的最簡單樸素的方法即直接線性掃瞄,大致步驟如下:
1. 計算待**資料與各訓練樣本之間的距離;
2. 按照距離遞增排序;
3. 選擇距離最小的k個點;
4. 計算這k個點類別的頻率,最高的即為待**資料的類別。
線性掃瞄非常耗時,為了減少計算距離的次數提高效率,使用kd樹方法,它能快速地找到查詢點近鄰。
可以通過將搜尋空間進行層次劃分建立索引樹以加快檢索速度。
對於二維空間,它最終要劃分的空間類似如下,
決定在哪個維度上進行分割是由所有資料在各個維度的方差決定的,方差越大說明該維度上的資料波動越大,更應該再該維度上對點進行劃分。例如x維度方差較大,所以以x維度方向劃分。
分割時一般取分割維度上的所有值的中值的點,比如下圖,第一次計算方差較大的維度為x維度,中值點為a,以x=ax分割,接著對分割後的點分別又繼續分割,計算方差並尋找中值,以y=cy、y=by分割,以此類推。
kd樹查詢
從根節點開始查詢,直到葉子節點,整個過程將最短距離d和相應的點記錄下來。
回溯,通過計算待**的點到分割平面的距離l與最短距離d比較,看是否要進入節點的相鄰空間去查詢。回溯的過程是為了確認是否有必要進入相鄰子空間去搜尋,當待**點到最近點的距離d大於待**點到分割面的距離l時,則需要到相鄰子空間查詢,否則則沒必要,直接往上一層回溯。
*****===廣告時間*****===
鄙人的新書《tomcat核心設計剖析》已經在京東銷售了,有需要的朋友可以到 進行預定。感謝各位朋友。
為什麼寫《tomcat核心設計剖析》
機器學習之K近鄰
k近鄰演算法在機器學習演算法中是最容易理解並且是最容易使用的演算法,下面是機器學習實戰中對k近鄰演算法的注釋。created on sep 16,2010 knn k nearest neighbors input inx vector to compare to existing dataset ...
機器學習之k 近鄰演算法
k nearest neighbor演算法又叫knn演算法,這個演算法是機器學習裡面乙個比較經典的演算法,總體來說knn演算法是相對比較容易理解的演算法 定義 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別 2 相似度 就是指兩個點之...
機器學習之K近鄰簡介
機器學習之k近鄰簡介。knn是常見的監督學習演算法,輸入是例項的特徵向量,輸出是例項對應的類別。給定測試樣本,基於某種距離計算方法,計算出與其距離最近的k個訓練樣本,根據多數表決方法判定屬於哪個類別。典型的懶惰學習演算法,不具有顯示的學習過程。在接受資料時,不做處理,當真正計算的時候才按照演算法流程...