統計機器學習 3 K近鄰法(二)Kd Tree

2021-10-06 12:38:23 字數 2513 閱讀 7618

為什麼需要kd樹呢?

因為在實現k近鄰法時,主要考慮的問題是如何對訓練資料進行快速k近鄰搜尋,這點在特徵空間的維度大及訓練資料容量大時尤其必要。k近鄰法最簡單的實現方法是線性掃瞄,這時要計算輸入例項與每乙個訓練例項點的距離,當訓練集很大時,計算非常耗時,這種方法是不可行的。為了提高k近鄰搜尋的效率,可以使用特殊的結果儲存訓練資料,以提高效率。

(1)構造kd樹

kd樹是一種對k維空間(這裡的k指的是k維空間不是knn中的k,knn中的k指的是k個近鄰點)中的例項點進行儲存以便對其進行快速檢索的樹形資料結構。kd樹是二叉樹,表示對k維空間的乙個劃分。構造kd樹相當於不斷地用垂直於座標軸的超平面將k維空間切分,構成一系列的k維超矩形區域。kd樹的每乙個結點對應於乙個k維超矩形區域。

輸入:k維空間資料集τ

=\tau = \

τ=, 其中xi=

(xi(

1),x

i(2)

,..,

xi(k

)),i

=1,2

,...

,n

;x_i = (x_i^, x_i^, .., x_i^), i = 1, 2, ..., n;

xi​=(x

i(1)

​,xi

(2)​

,..,

xi(k

)​),

i=1,

2,..

.,n;

輸出:kd樹

(1)開始:構造根節點,根節點對應於包含t

tt的k維空間的超矩形區域。

選擇x (1

)x^

x(1)

為座標軸,以t

tt中所有例項的x(1

)x^

x(1)

座標的中位數為切分點,將根節點對應的超矩形區域分成兩個子區域,切分由通過切分點並與座標軸x(1

)x^

x(1)

垂直的超平面實現。

由根節點生成深度為1的左、右子節點:左子節點對應座標x(1

)x^

x(1)

小於切分點的子區域,右子節點對應座標x(1

)x^

x(1)

大於切分點的子區域。

將落在切分超平面上的例項點儲存在跟節點上。

(2)重複:對深度為j

jj的節點,選擇x(l

)x^

x(l)

為切分的座標軸,l=j

(mod

k)+1

l = j(mod k) + 1

l=j(mo

dk)+

1,以該節點區域中的所有例項的x(l

)x^

x(l)

座標的中位數為切分點,將該節點對應的超矩形區域劃分為兩個子區域,切分由通過切分點並於座標軸x(l

)x^

x(l)

垂直的超平面實現。

由該結點生成深度為j+1

j+1j+

1的左、右子節點:左子結點對應座標x(l

)x^

x(l)

小於切分點的子區域,右結點對應座標x(l

)x^

x(l)

大於切分點的子區域。

將落在切分超平面上的例項點儲存在該結點。

(2)搜尋kd樹

將kd樹構造成功後,對於任意乙個輸入的點,我們應該如何找到這個點的k個近鄰呢??

這就是我們要將的kd樹。

輸入:已構造的kd數;目標點x;

輸出:x的最近鄰

(1)在kd樹種找到包含目標點x的葉結點:從根節點出發,遞迴地向下訪問kd樹,若目標點x當前維的座標小於切分點的座標,則移動到左子結點,否則移動到右子結點,直到子結點為葉結點為止。

(2)以此葉結點為「當前最近點」。

(3)遞迴地向上回退,在每個結點進行以下操作:

(a)如果該結點儲存的例項點比當前最近點距離目標點更近,則以該例項點為「當前最近點」。

(b)當前最近點一定存在於該結點乙個子結點對應的區域。檢查該子結點的父結點的另乙個結點對應的區域是否有更近的點。具體地,檢查另一子結點對應的區域是否與以目標點為球心、以目標點與「當前最近點」間的距離為半徑的超球面相交。

如果相交,可能在另乙個子結點對應的區域內存在距目標點更近的點,移動到另乙個子結點,接著,遞迴遞迴地進行最近鄰搜尋;

如果不相交,向上回退。

(4)當退回到根節點時,搜尋結束,最後的「當前最近點」即為x的最近鄰點。

如果例項點是隨機分布的,kd樹搜尋的平均計算複雜度是o(l

ogn)

o(log n)

o(logn

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

同時在sklearn關於knn的演算法中,在底層有兩個選擇:kdtree和ball tree,有興趣的可檢視維基百科關於ball tree的介紹-提取碼:ugem

機器學習演算法總結3 k近鄰法

k近鄰法 k nn 是一種基本分類與回歸方法。演算法思想 給定乙個訓練資料集,對新的輸入例項,在訓練資料集中找到與其最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為哪個類。k近鄰的特殊情況是k 1的情形,稱為最近鄰演算法。k近鄰演算法沒有顯式的學習過程。1.模型 k近鄰法使用的模型對...

機器學習 統計學習方法 3 k近鄰法 筆記

注 本章只介紹分類問題的k近鄰演算法。t t t 其中,xi x rn x i in mathcal subset r n xi x rn為例項的特徵變數,yi y y i in mathcal yi y 為例項的類別,i 1 2,3 n i 1,2,3,n i 1,2,3,n 例項特徵變數 xxx...

統計學習方法 3K近鄰法

1968年由cover和hart提出。k近鄰法假設給定乙個訓練資料集,其中的例項類別已定。分類時,對新的例項,根據其k個最近鄰的訓練例項的類別,通過多數表決等方式進行 k近鄰法實際上利用訓練資料集對特徵向量空間進行劃分,並作為其分類的 模型 k近鄰法三要素 k值得選擇 距離度量和分類決策規則。lp距...