李航《統計學習方法》CH03
CH03 k近鄰法
前言
章節目錄
- k近鄰演算法
- k近鄰模型
- 模型
- 距離度量
- k值選擇
- 分類決策規則
- k近鄰法的實現: KDTree
- 構造KDTree
- 搜尋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詞條
- p=1 對應 曼哈頓距離
- p=2 對應 歐氏距離
- 任意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的點
- 前一點換個表達方式, 圖中的點向量($x_1$, $x_2$)的p範數都為1
- 圖中包含多條曲線, 關於p=1並沒有對稱關係
- 定義中$p\geqslant1$,這一組曲線中剛好是凸的
這裡要補充一點:
範數是對向量或者矩陣的度量,是一個標量,這個裡面兩個點之間的$L_p$距離可以認為是兩個點座標差值的p範數。
參考下例題3.1的測試案例,這個實際上沒有用到模型的相關內容。
k值選擇
- 關於k大小對預測結果的影響, 書中給的參考文獻是ESL, 這本書還有個先導書叫ISL.
- 通過交叉驗證選取最優k
- 二分類問題, 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如上。