統計學習方法 第3章 k近鄰法

統計學習方法 第3章 k近鄰法

算法

k近鄰法:給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實例最臨近的k個實例,這k個實例的多數屬於某個類,就把該輸入實例分爲這個類。

訓練數據集:

其中xi爲實例的特徵向量,yi爲實例的類別。

  1. 根據給定的距離度量,在訓練集中找出與輸入x最臨近的k個點
  2. 從包含這k個點的鄰域中根據分類決策規則(如多數表決)決定x的類別y

模型

k近鄰法中,當訓練集,距離度量,k值及分類決策規則確定後,對於任何一個新的輸入實例,它所屬的類唯一確定。

特徵空間中,對每個訓練實例點xi,距離該店比其他點更近的所有點組成一個單元,所有訓練實例點的單元構成對特徵空間的一個劃分,如:

最常用的距離度量爲歐氏距離,即L2距離。
Lp距離定義爲:

p=1時爲曼哈頓距離,p=2時爲歐氏距離。

若選擇較小的k值,則只有與輸入實例較近的訓練實例纔會對預測結果起作用,學習的近似誤差會減小,但估計誤差會增大,容易產生過擬合。選擇較大的k值可以減小估計誤差,但近似誤差會增大,整體模型變得簡單。在實際應用中一般選取一個比較小的數值,並通過交叉驗證發選取最優的k值。

實現:kd樹

若通過線性掃描的方式尋找最近的k個訓練數據,則計算耗時過長。
kd樹是一種對k維空間的實例點進行存儲以便對其進行快速檢索的二叉樹。利用kd樹可以省去對大部分數據點的搜索,從而減少搜索的計算量。

構造kd樹相當於不斷用垂直於座標軸的超平面將k維空間劃分,構成一系列的k維超矩形區域。kd樹的每個節點對應於一個k維超矩形區域。

構造平衡kd樹

k維空間數據集 T={x1,x2,…,xN}
其中xi=(xi(1),xi(2),…,xi(i)) i=1~N

  1. 構造根節點,根節點對應包含T的k維空間的超矩形區域
  2. 選x1爲座標軸,以所有實例的x1座標中位數爲切分點將超矩形區域區分成兩個子區域,分別爲左右子節點,並將切分超平面上的實例點保存在根節點
  3. 重複:對深度爲j的節點,選xl,l=j(mod k)+1爲切分座標軸,所有實例在該座標軸的座標中位數爲切分點進行切分,直到子區域沒有實例時停止

搜索kd樹

  1. 從根節點出發,遞歸地向下訪問,根據每個節點的切分座標比較目標點,直到抵達葉子節點,以此葉子節點爲當前最近點
  2. 遞歸地向上回退,對每個節點進行操作:
    1. 若該節點保存的實例比當前最近點距目標點更近,則以該節點爲當前最近點
    2. 檢查該子節點的父節點的另一子節點對應的區域是否與以目標點爲球心,目標點與當前最近點距離爲半徑的圓相交,若相交則移動到另一子節點,遞歸進行搜索,若不相交則繼續回退
  3. 回退到根節點,搜索結束,當前最近點即爲目標點的最近鄰點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章