K近鄰演算法(kNN)學習——kd樹
阿新 • • 發佈:2019-01-07
構造kd樹的過程我自己總結了一個口訣就是:“選擇中位數,一橫一豎”
構造平衡kd樹演算法
輸入:k維空間資料集
輸出kd樹。
(1)分別基於輸入的資料集,計算k維資料中方差最大的一維(也可以依次分割每一維度),為了便於介紹,本演算法以依次分割每一維度進行的,所以選擇
(2)選擇
由根節點生成深度為1的左、右子節點:左子節點對應座標
(3)重複步驟(2),對於深度為j的節點,選擇
(4)停止條件:直到兩個子區域內沒有例項存在時停止。
舉例:
假設有6個二維資料點
a)依次分割每一維度,因此先分割x軸;
b)根據x軸方向的值2,5,9,4,8,7排序選出中值為7,所以以(7,2)為分割點。這樣,該節點的分割超平面就是通過(7,2)並垂直於x軸的直線x = 7;
c)確定左子空間(x <= 7的部分)和右子空間(x > 7的部分)進行上面兩步遞迴操作直到空間中只包含一個數據點。最後生成的kd樹對應的空間劃分為圖1,kd樹如圖2。