1. 程式人生 > >第三章k近鄰法(接上篇)

第三章k近鄰法(接上篇)

3.3k近鄰法的實現:kd樹

3.3.1構造kd樹,
(1)構造跟節點,以訓練集T中的一維度的中位點作為切分點,將超矩形區域劃分為兩部分,
(2)重複:對深度為j的節點選擇切分座標的中位值,
(3)直到子區域沒有例項存在為止,從而形成kd樹的劃分
3.3.2搜尋kd樹
用kd樹進行最近鄰搜尋
(1)從根節點出發,遞歸向下訪問kd樹,直到子節點為葉節點為止
(2)以此葉節點為當前最近點
(3)遞歸向回推,每個節點做一下的操作:
	(a)如果該節點的例項比當前儲存的最近點距離更近,則把這個節點作為當前最近節點。
	(b)檢查該子節點的父節點的另一個區域是否有更近點,即檢查以目標點為球心,以目標點與當前最近點距離為半徑的超球體是否與該子區域相交。如果相交,則可能存在距離更近的點,需要在該子區域具體搜尋,如果不想交,則向上回退。
(4)當回退到根節點時,搜尋結束。
kd樹適用於訓練例項數遠大於空間維數的k緊鄰搜尋。