1. 程式人生 > >統計學習筆記之K近鄰法

統計學習筆記之K近鄰法

K近鄰作為基本的分類和迴歸方法。在分類中,對新的例項,根據k個最近鄰得訓練例項的類別,通過多數表決進行預測。

一、演算法

輸入:T =\left \{ (x_{1},y_{1}),(x_{2},y_{2}),\cdots (x_{n},y_{n}) \right \}x_{i}\in \mathbb{X}為例項的特徵向量,y_{i}\in \mathbb{Y} =\left \{ c_{1},c_{2}\cdots c_{n} \right \}為例項的類別。

輸出:例項的x的所屬的類y。

(1)根據給定距離度量,在訓練集中找出與x最近鄰的k個點,涵蓋這k個點的x的領域記作N_{k}\left ( x \right )

(2)在N_{k}(x) 根據分類決策規則(類似多數投票)決定x屬於哪一類。

二、相關概念

值得一提的是關於距離度量的幾個概念。

距離通式:

                                                L_{p}\left ( x_{i},y_{i} \right )=\left [ \sum_{l=1}^{n} \left | x_{i}^{\left ( l \right )} -y_{i}^{\left ( l \right )}\right |^{p}\right ]^{\frac{1}{p}}

歐式距離,p=2,即

                                               L_{2}\left ( x_{i},y_{i} \right )=\left [ \sum_{l=1}^{n} \left | x_{i}^{\left ( l \right )} -y_{i}^{\left ( l \right )}\right |^{2}\right ]^{\frac{1}{2}}

曼哈頓距離,p=1,即

                                               L_{1}\left ( x_{i},y_{i} \right )=\sum_{l=1}^{n} \left | x_{i}^{\left ( l \right )} -y_{i}^{\left ( l \right )}\right |

各個座標距離的最大值p=\infty,即

                                               L_{\infty }\left ( x_{i},y_{i} \right )=max_{l} \left | x_{i}^{\left ( l \right )} -y_{i}^{\left ( l \right )}\right |

下圖直觀展示了三種不同度量方式在表示到原點距離是1的點畫出的影象:

                                                 

三、kd樹

KNN在對資料進行k近鄰搜尋的時候,有時因為資料量較大,搜尋開銷是個值得思考的問題。於是,kd樹的思想應運而生。實際上,kd樹是二叉樹,是考慮將k維空間例項點進行儲存和便於快速檢索的樹形資料結構。

演算法

輸入:k維空間資料集T=\left \{ x_{1},x_{2}, \cdots x_{n} \right \},x_{i}=(x^{(1)},x^{(2)}\cdots x^{(n)})

輸出:kd樹

(1)構造根節點,包含T的k維空間的超矩形區域。

(2)選擇x^{(1)}的座標軸,以T中的所有例項的x^{(1)}座標的中位數作為切分點,通過切分點並於座標軸x^{(1)}垂直作超平面,將超矩形區域分成兩個子區域。以此生成深度為1的左右兩個結點,左結點表示x^{(1)}小於切分點的子區域,右結點表示x^{(1)}大於切分點的子區域。

(3)重複(2)操作,直至兩個子區域沒有例項存在為止。

可以借用《統計學習》有道例題理解:

kd樹最近鄰搜尋演算法

輸入:已構造好kd樹,目標點為x.

輸出:x的最近鄰點.

(1)遞迴搜尋包含目標結點的葉結點。

(2)設葉結點為最近點。

(3)遞歸回退,對於每個結點如果比當前最近點距離更小,則以該點為最近點。對於每個結點的兄弟結點也要進行遍歷,判斷是否更新最近點。

(4)當回退到根結點,搜尋結束。最後的最近點即為所求。