1. 程式人生 > >李航《統計學習方法》CH03

李航《統計學習方法》CH03

CH03 k近鄰法

前言

章節目錄

  1. k近鄰演算法
  2. k近鄰模型
    1. 模型
    2. 距離度量
    3. k值選擇
    4. 分類決策規則
  3. k近鄰法的實現: KDTree
    1. 構造KDTree
    2. 搜尋KDTree

導讀

kNN是一種基本分類與迴歸方法.

  • 0-1損失函式下的經驗風險最小化
  • kNN的k和KDTree的k含義不同,
  • KDTree是一種儲存k維空間資料的樹結構
  • 建立空間索引的方法在點雲資料處理中也有廣泛的應用,KDTree和八叉樹在3D點雲資料組織中應用比較廣
  • KDTree是二叉樹
  • 另外,書中的KDTree實現的時候針對了一種k=1的特殊的情況

最近鄰演算法

k=1的情形, 稱為最近鄰演算法. 書中後面的分析都是按照最近鄰做例子, 這樣不用判斷類別, 可以略去一些細節.

k近鄰模型

距離度量

特徵空間中的兩個例項點的距離是兩個例項點相似程度的反映。

書中是如上描述的,這裡要注意距離越近(數值越小), 相似度越大。

這裡用到了$L_p$距離, 可以參考Wikipedia上$L_p$ Space詞條

  1. p=1 對應 曼哈頓距離
  2. p=2 對應 歐氏距離
  3. 任意p 對應 閔可夫斯基距離

$$L_p(x_i, x_j)=\left(\sum_{l=1}^{n}{\left|x_{i}^{(l)}-x_{j}^{(l)}\right|^p}\right)^{\frac{1}{p}}$$

考慮二維的情況, 上圖給出了不同的p值情況下與原點距離為1的點的圖形. 這個圖有幾點理解下:

  1. 與原點的距離
  2. 與原點距離為1的點
  3. 前一點換個表達方式, 圖中的點向量($x_1$, $x_2$)的p範數都為1
  4. 圖中包含多條曲線, 關於p=1並沒有對稱關係
  5. 定義中$p\geqslant1$,這一組曲線中剛好是凸的

這裡要補充一點:

範數是對向量或者矩陣的度量,是一個標量,這個裡面兩個點之間的$L_p$距離可以認為是兩個點座標差值的p範數。

參考下例題3.1的測試案例,這個實際上沒有用到模型的相關內容。

k值選擇

  1. 關於k大小對預測結果的影響, 書中給的參考文獻是ESL, 這本書還有個先導書叫ISL.
  2. 通過交叉驗證選取最優k
  3. 二分類問題, k選擇奇數有助於避免平票

分類決策規則

Majority Voting Rule

誤分類率

$\frac{1}{k}\sum_{x_i\in N_k(x)}{I(y_i\ne c_i)}=1-\frac{1}{k}\sum_{x_i\in N_k(x)}{I(y_i= c_i)}$

如果分類損失函式是0-1損失, 誤分類率最低即經驗風險最小.

關於經驗風險, 參考書上CH01第一章 (1.11)和(1.16)

實現

kNN在實現的時候,要考慮多維資料的儲存,這裡會用到樹結構。

在Scipy Cookbook裡面有個kd樹具體的實現^2可參考

構造KDTree

KDTree的構建是一個遞迴的過程

注意KDTree左邊的點比父節點小,右邊的點比父節點大。

這裡面有提到,平衡的KDTree搜尋時效率未必是最優的,為什麼

考慮個例子

[[1, 1],
 [2, 1],
 [3, 1],
 [4, 1],
 [5, 1],
 [6, 1],
 [100, 1],
 [1000, 1]]

這個資料,如果找[100, 1]

搜尋KDTree

這部分書中的例子是最近鄰的搜尋例子。

例子

例3.1

分析p值對最近鄰點的影響,這個有一點要注意關於閔可夫斯基距離的理解:

  • 兩點座標差的p範數

具體看相關測試案例的實現

例3.2

KDTree建立

例3.3

KDTree搜尋

graph TD
	subgraph 對應圖3.5
	A[A]---B((B))
	A---C((C))
	B(B)---F((F))
	B---D((D))
	C(C)---G((G))
	C---E((E))
	end

這個例子說明了搜尋的方法,理解一下書中的圖3.5,對應的KDTree如上。