-
k近鄰算法
輸入:訓練數據集, 其中爲實例的特徵向量,,實例特徵向量,
輸出:實例對應的類別,
- 根據給定的距離度量,在T中尋找與最近的k個點,涵蓋這k個點的x的鄰域記作, 2. 在中根據分類決策規則決定的類別
如果k=1, 則對應的算法爲最近鄰算法,
-
模型
當訓練集,距離度量,k值及分類決策規律確定下來後,對於任意的輸入實例,它所屬的類都是唯一確定的,這相當於把特徵空間劃分爲一些子空間,
-
k值選擇
如果k選的太小,則近似誤差會減小,估計誤差會變大,模型會變複雜,容易發生過擬合,容易受到噪聲的干擾,
如果k選的太大,則估計誤差變小,但近似誤差會增大,這樣模型會變複雜,
-
分類決策規則
一般都是多數表決,
多數表決的損失函數爲0-1損失函數,分類函數爲
如果對於輸入的實例, 其最臨近的k個訓練實例點構成的集合爲, 如果涵蓋這個集合的類別爲,則誤分類率爲
注意,這裏的誤分類率指的是一個樣本的誤分類率,而不是所有輸入樣本的誤分類率,多數表決規則等價於經驗風險最小化,
-
kd樹
kd樹是二叉樹,表示對k維空間的一個劃分,
構造平衡kd樹的算法如下,但平衡kd樹不見得是最好的,
輸入:k維空間數據集, 其中
輸出: kd樹
- 構造根節點,根節點對應包含T的k維空間,選擇位座標軸,以T中所有實例的座標的中位數爲切分點,切分由通過切分點並與座標軸垂直的超平面實現,切分爲兩個子節點,左子節點中存放的是較小的子區域,右子節點存放的是較大的子區域,將落在切分超平面的實例點保存在根節點,
- 重複,對於深度爲的節點,選擇爲切分的座標軸,, 再次切分這這兩個子區域,而後生成深度爲的左右子節點,同樣,將落在切分超平面上實例點保存在該節點,
- 直到兩個子區域沒有實例存在停止,
通俗易懂的說法是開始從第一維開始,選擇大於中位數的放到右節點,小於中位數的放到左節點,而後選擇第二維,分別對左右節點實施同樣的操作,構造kd樹,
這裏只介紹對於kd樹如何進行最近鄰搜索,k近鄰也是一樣的,實質上就是在找訓練集中與最臨近的那個點,
輸入: 已經構造的kd樹,目標點,
輸出: 的最近鄰
- 在kd樹中找到包含的葉節點,經過與樹中節點的比較,目標點會落在某一個葉節點上,
- 定義此節點爲最近點
- 遞歸的向上回退,在每個節點執行:
- 如果該節點保存的實例點比當前最近點距離目標點更近,則更新最近點爲該實例點
- 檢查該節點的父節點的另一個子節點是否存在更近的點,具體地,檢查另一子節點對應的去榆中是否與以目標點爲球心,以目標點與當前最近點的距離爲半徑的超球體相交,如果相交,則移動到另一節點,接着遞歸的完成最近鄰搜索,如果不相交,則回退,
- 當回退到根節點時,搜索結束,最後的當前最近點爲的最近點,
ML基本知識(八)K近鄰法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.