knn使用場景
K近鄰算法是一種基本的分類和迴歸方法。在分類問題中,KNN算法假設給定的訓練集的實例類別已經肯定,對於新來的實例,KNN算法根據其k個最近鄰的訓練集實例的類別,經過多數表決等方式對新實例的類別進行預測。
KNN算法的三個基本要素是:k值的選擇(即輸入新實例要取多少個訓練實例點做爲近鄰),距離度量方式(歐氏距離,曼哈頓距離等)以及分類的決策規則(經常使用的方式是取k個近鄰訓練實例中類別出現次數最多者做爲輸入新實例的類別)。
knn算法步驟
knn距離計算方法
k值選取及侷限性
knn分類決策規則
knn實現中用到的kdtree
k近鄰爲減小搜索空間的複雜度,常採用k-d樹的空間二叉樹,它是一種k維歐幾里得空間組織點的數據結構。
k-d樹的經典建立過程以下:
a)隨着樹的深度輪流選擇軸當作分割面。
(例如在三維空間中根節點是 x 軸垂直分割面,其子節點皆爲 y 軸垂直分割面,其孫節點皆爲 z 軸垂 直分割面,其曾孫節點則皆爲 x 軸垂直分割面,依此類推。)
b)點由垂直分割面之軸座標的中位數區分放入子樹。
wikipedia圖示以下:
k-d樹建立實例:
假設有6個二維數據點{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},首先根據x軸找到中位數7,以分割面x=7分爲左右兩個子空間,(2,3) (4,7) (5,4)位於左子空間,(8,1) (9,6)位於右子空間,左子空間再以y=4爲分割面劃分左子空間爲上下兩部分,同理劃分右子空間。
k-d樹最鄰近搜索的過程以下:
a)從根節點開始,遞歸的往下移。往左仍是往右的決定方法與插入元素的方法同樣(若是輸入點在分區 面的左邊則進入左子節點,在右邊則進入右子節點)。
b)一旦移動到葉節點,將該節點看成"目前最佳點"。
c)解開遞歸,並對每一個通過的節點運行下列步驟:
1)若是目前所在點比目前最佳點更靠近輸入點,則將其變爲目前最佳點。
2)檢查另外一邊子樹有沒有更近的點,若是有則從該節點往下找。
d)當根節點搜索完畢後完成最鄰近搜索。
參考推薦:
李航《統計學習方法》