knn演算法學習

2021-10-21 21:43:55 字數 1494 閱讀 1586

k近鄰近鄰演算法:

多數表決規則等價於經驗風險最小化:

損失函式最小化:一訓練資料為基礎,通過此類分類規則計算得到

一塊區域,有k個訓練資料,1,2,3個類別。1>2>3

當此區域判為1,損失函式等於2,3個數和

當此區域判為2,損失函式等於1,3個數和

當此區域判為3,損失函式為1,2個數和

選取損失函式最小的,即個數最多的類別。作為此區域類別。所以此區域判別為1.

kd樹:

第一步:找到包含點s的葉結點d,以點d作為"近似最近鄰"。

從根結點出發,遞迴向下訪問kd樹。若目標點s當前維的座標小於切分點的座標,則移動到下子結點,否則移動到上子結點。直到子結點為葉結點時結束,此時的葉結點就暫定為"當前最近鄰",也可稱近似最近鄰。

真正最近鄰一定在以點s為中心,通過點d的圓的內部。這個圓在更高維空間裡叫做"超球體"。

第二步:回退到結點d的父結點b,這一步有兩個檢查。

1.計算父結點b到s的距離,如果更近(即點b在圓內),則將點b更新為當前最近鄰。

2.檢查父結點的另乙個子結點中是否有例項點在圓內。具體方法是,先檢查另乙個子結點對應的超矩形區域是否與上面的那個圓(即以s為中心,通過點d的圓)相交:如果相交,就有可能存在比當前最近點更近的點;如果不相交,繼續想上回退。

第三步:直到回退到根結點時,進行第二步的判斷,然後就搜尋結束了。此時的"當前最近鄰"即為s的最近鄰。最後算得點e為s的最近鄰。

時間複雜度為。kd樹更適合於訓練例項數遠大於空間維數時的k近鄰搜尋。當空間維數接近訓練例項數時,它的效率會迅速下降,幾乎接近線性掃瞄。

kd樹的每輪中本次的切分域的選擇將計算待切分空間內的點此輪未被切分維度上的方差,找方差最大的維度作為此次的切分域。

一輪是指的必須依照k個維度

詳細流程例子:

缺點和改進:

1、優點

簡單,易於理解,易於實現,無需引數估計,無需訓練; 

對異常值不敏感(個別噪音資料對結果的影響不是很大);

適合對稀有事件進行分類;

適合於多分類問題(multi-modal,物件具有多個類別標籤),knn要比svm表現要好;

2、缺點

對測試樣本分類時的計算量大,記憶體開銷大,因為對每乙個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的k個最近鄰點。目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本; 

可解釋性差,無法告訴你哪個變數更重要,無法給出決策樹那樣的規則;

k值的選擇:最大的缺點是當樣本不平衡時,如乙個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入乙個新樣本時,該樣本的k個鄰居中大容量類的樣本占多數。該演算法只計算「最近的」鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響執行結果。可以採用權值的方法(和該樣本距離小的鄰居權值大)來改進;

knn是一種消極學習方法、懶惰演算法。

————————————————

KNN演算法學習

knn演算法,我的理解是在有標籤的訓練樣本分佈中,有n個需要測試的樣本,通過尤拉距離 通過計算每個測試樣本得出離訓練最近的k個樣本,同過k個樣本中某一類標籤所佔的比例最高,則將該測試值 為該標籤。import numpy as np from math import sqrt from collec...

KNN演算法學習筆記

概念 k近鄰 knn,k nearestneighbor 所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。核心思想 如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。最簡單的機器學習演算法之...

演算法學習2 KNN 演算法

昨天找到乙個資料分析的眾包 kaggle 希望藉此來練習一下前段時間學習到的ml演算法。今天就來回顧一下之前學習到的 knn 演算法,並用knn演算法進行手寫數字的識別。knn演算法,即 k最近鄰 k nearestneighbor 分類演算法,是最簡單的機器學習演算法之一,演算法思想很簡單 從訓練...