ML基本知識(八)K近鄰法

  • k近鄰算法


    輸入:訓練數據集T={(xi,yi)}i=1NT=\{(x_i, y_i)\}^N_{i=1}, 其中xix_i爲實例的特徵向量,yi{c1,c2,...,ck},i=1,2,...,Ny_i\in \{c_1, c_2, ..., c_k\}, i=1,2,...,N,實例特徵向量xx,

    輸出:實例xx對應的類別yy,

    1. 根據給定的距離度量,在T中尋找與xx最近的k個點,涵蓋這k個點的x的鄰域記作Nk(x)N_k(x), 2. 在Nk(x)N_k(x)中根據分類決策規則決定xx的類別

    y=argmaxcjxiNk(x)I(yi=cj),i=1,2,...,N;j=1,2,...,K y= argmax_{c_j}\sum _{x_i\in N_k(x)}I(y_i=c_j), i=1,2,...,N; j=1,2,...,K

    如果k=1, 則對應的算法爲最近鄰算法,

  • 模型

    當訓練集,距離度量,k值及分類決策規律確定下來後,對於任意的輸入實例,它所屬的類都是唯一確定的,這相當於把特徵空間劃分爲一些子空間,

    image

  • k值選擇

    如果k選的太小,則近似誤差會減小,估計誤差會變大,模型會變複雜,容易發生過擬合,容易受到噪聲的干擾,

    如果k選的太大,則估計誤差變小,但近似誤差會增大,這樣模型會變複雜,

  • 分類決策規則

    一般都是多數表決,

    多數表決的損失函數爲0-1損失函數,分類函數爲

    f:Rn{c1,c2,...,cn} f:R^n\rightarrow \left \{ c_1, c_2,...,c_n \right \}
    如果對於輸入的實例xx, 其最臨近的k個訓練實例點構成的集合爲Nk(x)N_k(x), 如果涵蓋這個集合的類別爲cjc_j,則誤分類率爲

    1kxiNk(x)I(yicj)=11kxiNk(x)I(yi=cj) \frac{1}{k}\sum _{x_i \in N_k(x)}I(y_i\neq c_j)=1-\frac{1}{k}\sum _{x_i \in N_k(x)}I(y_i= c_j)
    注意,這裏的誤分類率指的是一個樣本的誤分類率,而不是所有輸入樣本的誤分類率

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

  • kd樹

    kd樹是二叉樹,表示對k維空間的一個劃分,

    構造平衡kd樹的算法如下,但平衡kd樹不見得是最好的,


    輸入:k維空間數據集T={x1,x2,...,xN}T=\{x_1,x_2,...,x_N\}, 其中xi=(xi(1),xi(2),...,xi(k)),i=1,2,...,Nx_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(k)}), i=1,2,...,N

    輸出: kd樹

    1. 構造根節點,根節點對應包含T的k維空間,選擇x(1)x^{(1)}位座標軸,以T中所有實例的x(1)x^{(1)}座標的中位數爲切分點,切分由通過切分點並與座標軸x(1)x^{(1)}垂直的超平面實現,切分爲兩個子節點,左子節點中存放的是x(1)x^{(1)}較小的子區域,右子節點存放的是x(1)x^{(1)}較大的子區域,將落在切分超平面的實例點保存在根節點
    2. 重複,對於深度爲jj的節點,選擇x(l)x^{(l)}爲切分的座標軸,l=j mod k+1l=j\ mod \ k+1, 再次切分這這兩個子區域,而後生成深度爲j+1j+1的左右子節點,同樣,將落在切分超平面上實例點保存在該節點,
    3. 直到兩個子區域沒有實例存在停止,

    通俗易懂的說法是開始從第一維開始,選擇大於中位數的放到右節點,小於中位數的放到左節點,而後選擇第二維,分別對左右節點實施同樣的操作,構造kd樹,

    這裏只介紹對於kd樹如何進行最近鄰搜索,k近鄰也是一樣的,實質上就是在找訓練集中與xx最臨近的那個點,


    輸入: 已經構造的kd樹,目標點xx,

    輸出: xx的最近鄰

    1. 在kd樹中找到包含xx的葉節點,經過與樹中節點的比較,目標點會落在某一個葉節點上,
    2. 定義此節點爲最近點
    3. 遞歸的向上回退,在每個節點執行:
      1. 如果該節點保存的實例點比當前最近點距離目標點更近,則更新最近點爲該實例點
      2. 檢查該節點的父節點的另一個子節點是否存在更近的點,具體地,檢查另一子節點對應的去榆中是否與以目標點爲球心,以目標點與當前最近點的距離爲半徑的超球體相交,如果相交,則移動到另一節點,接着遞歸的完成最近鄰搜索,如果不相交,則回退,
    4. 當回退到根節點時,搜索結束,最後的當前最近點爲xx的最近點,
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章