K近鄰分類法


K近鄰法

       K近鄰法:假定存在已標記的訓練數據集,分類時對新的實例根據其K個最近鄰的訓練實例的類別,通過多數表決等分類決策規則進行預測。

       k近鄰不具有顯示學習的過程,是“懶惰學習”(lazy learning)。分類器不需要使用訓練集進行訓練。實際上是利用訓練數據集對特征向量空間進行划分,並作為其分類的“模型”。

(標注:Lazy learning懶惰學習:訓練階段僅僅把樣本保存起來,無訓練時間開銷,收到測試樣本再進行處理;

           Eager laarning急切學習:訓練階段就對樣本學習處理的方法。)

1  K近鄰分類法的三個基本要素

     K近鄰分類法的三個基本要素為:k值的選擇、距離度量、分類決策規則。當三個要素確定后,對於任何一個新的輸入實例,它所屬的類唯一的確定。

1.1 k值的選擇

      K值的選擇會對k近鄰法的結果產生較大的影響。

    當k較小時:

           優點:學習的近似誤差會減小。

        缺點:預測結果會對近鄰的實例點非常敏感,k值的減小就意味着整體模型變得復雜,容易發生過擬合。

    當k較大時:

           優點:減小學習的估計誤差。

        缺點:學習的近似誤差會增大,k值的增大意味着整體的模型變得簡單,過於簡單會完全忽略訓練實例中的大量有用信息。

      K值一般取一個較小的值,通常采用交叉驗證法來選取最優的k值。

1.2 距離度量

       特征空間中的兩個實例點的距離是兩個實例點相似程度的反映。不同的距離度量方式所確定的最近鄰點是不同的。K近鄰的一般使用的是歐式距離,但也可以是其他距離。

          Lp距離:

                                             (p>=1)

              P=2  歐式距離

              P=1  曼哈頓距離

              P= 各個坐標距離的最大值

1.3 分類決策規則

          K近鄰中的分類決策規則一般是多數表決,即由輸入實例的k個最近鄰中的多數類決定輸入實例的類。

          多數表決規則等價於經驗風險最小化。

2  K近鄰的一個實現方法:kd樹

      問題:如何對訓練數據進行快速k近鄰搜索

      最簡單的實現方法:線性掃描。缺點:當訓練集很大時,計算非常耗時。所以需要特殊的存儲結構存儲訓練數據:kd樹,以減少計算距離的次數。

因為實際數據一般都會呈現簇狀的聚類形態,因此我們想到建立數據索引,然后再進行快速匹配。索引樹是一種樹結構索引方法,其基本思想是對搜索空間進行層次划分。若划分空間沒有重疊,其代表就是k-d樹。

         k-d樹(k-dimensional tree),是一種分割k維數據空間的數據結構。本質上是二叉樹,表示對k維空間的一個划分,構成一系列的k維超矩形區域。

      方法:依次選擇坐標軸對空間切分,選在一個坐標軸並在此坐標軸上選定一個切分點,根據選定的切分點垂直於選定的切分點將當前矩形區域切分(若選擇中位數為切分點,這樣得到的kd樹是平衡的),直到每一個子區域內沒有實例點為止。

      例:6個二維數據點{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},數據點位於二維空間內(如圖1中黑點所示)。k-d樹算法就是要確定圖1中這些分割空間的分割線(多維空間即為分割平面,一般為超平面)。

 

 

        分析:首先選擇x軸,6個點的x坐標的中位數為7,以x=7划分為左右兩個子矩形。選擇y軸,左矩形以y=4划分,右矩形以y=6划分,如此遞歸,直到划分如圖1所示並生成如圖2所示的k-d樹。

 

 

         搜索以最近鄰為例:

      查找點為(2,4.5)。從(7,2)開始,橫坐標2小於7進入左子樹(5,4),4.5大於4進入右子樹(4,7),形成搜索路徑<(7,2),(5,4),(4,7)>,取(4,7)為當前最近鄰點,計算其與目標查找點的距離為3.202。然后回溯到(5,4),計算其與查找點之間的距離為3.041。以(2,4.5)為圓心,以3.041為半徑作圓,可見該圓和y = 4超平面交割,所以需要進入(5,4)左子空間進行查找。此時需將(2,3)節點加入搜索路徑中得<(7,2),(2,3)>。回溯至(2,3)葉子節點,(2,3)距離(2,4.5)比(5,4)要近,所以最近鄰點更新為(2,3),最近距離更新為1.5。回溯至(7,2),以(2,4.5)為圓心1.5為半徑作圓,並不和x = 7分割超平面交割。至此,搜索路徑回溯完。返回最近鄰點(2,3),最近距離1.5。

        Kd樹搜索的平均時間復雜度是O(logN),kd樹更適合於訓練實例數遠大於空間維數,當其接近時效率下降,幾乎接近於線性掃描。

3  k近鄰法用於回歸

        KNN算法不僅可以用於分類,還可以用於回歸。通過找出一個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的權值(weight),如權值與距離成反比。 

 

參考

百度百科:k近鄰算法 

http://baike.baidu.com/link?url=niNGb6_6PCMqgofzhI8Ku1MtGOjJY2tkK3D6eUq8f2Ws-G0VWAWeexRt-m42TjmvJptskDtBE2BYKLqE-yHlHK

百度百科:Kd樹:

http://baike.baidu.com/link?url=B2eikDcSHrYQw2pHkEI0A0kVrNywu7pfCTPwlYvCADvW5cupT7-rIyUNu_LPOApA-PClHiSOefnjbYUA6JomH_

李航  《統計學習方法》

博客:http://blog.csdn.net/likika2012/article/details/39619687


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM