統計學習方法——第3章 k近鄰法

3.1 k近鄰法介紹

k近鄰法是一種基本的分類與迴歸方法。對於分類問題,給定訓練數據集和實例標籤。分類時,對新的實例,根據k個最近鄰的訓練實例的類別,通過多數表決等方式進行預測。因此,k近鄰法不具有顯示的學習過程。k近鄰法實際上利用訓練數據集對特徵空間進行劃分,並作爲分類的“模型”。k值的選擇、距離的度量和分類決策規則是k近鄰法的三個基本要素

k值的選擇

k值的選擇對k近鄰算法具有較大影響。

如果選擇的k值較小,相當於用較小的領域中的訓練實例進行預測,“學習”的“近似”誤差會減小,只有與輸入實例較近的訓練實例纔會對預測結果起作用,“學習”的“估計”誤差會增大,預測結果對近鄰的實例點非常敏感。如果鄰近的實例的恰巧是噪聲,預測就會出錯。所以,k值較小,相當於模型整體複雜度較高,容易發生過擬合

如果選擇的k值較大,相當於用較大的領域中的訓練實例進行預測,“學習”的“近似”誤差會增大,大量的訓練實例對預測結果起控制作用,結果較遠的點也會對預測起作用,“學習”的“估計”誤差會減小,預測結果是衆多結果的綜合效果。。所以,k值較大,相當於模型整體複雜度較低,容易發生欠擬合

距離的度量

k近鄰模型的特徵空間一般是n維實數向量空間R^nx_{i}, x_{i} \in \mathcal{X}, \quad x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(n)}\right)^{\mathrm{T}},x_{j}=\left(x_{j}^{(1)}, x_{j}^{(2)}, \cdots, x_{j}^{(n)}\right)^{\mathrm{T}},使用的距離是歐式距離,也可以使用其他距離,如更一般的L_p距離。

設特徵空間\mathcal{X}是n維實數向量空間\mathbf {R}^n,x_{i}, x_{i} \in \mathcal{X}, \quad x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(n)}\right)^{\mathrm{T}},x_{j}=\left(x_{j}^{(1)}, x_{j}^{(2)}, \cdots, x_{j}^{(n)}\right)^{\mathrm{T}},x_ix_j的距離定義爲(1 \leq p):

p=2時,稱爲歐式距離:L_{2}\left(x_{i}, x_{j}\right)=\left(\sum_{l=1}^{n}\left|x_{i}^{(l)}-x_{j}^{(l)}\right|^{2}\right)^{\frac{1}{2}}

p=1時,稱爲曼哈頓距離:L_{1}\left(x_{i}, x_{j}\right)=\sum_{i=1}^{n}\left|x_{i}^{(l)}-x_{j}^{(l)}\right|

p=\infty時,L_{\infty}\left(x_{i}, x_{j}\right)=\max _{l}\left|x_{i}^{(l)}-x_{j}^{(l)}\right|

二維空間的不同取值與原點的距離爲1的點的集合如下:

 

分類決策規則

多數表決規則(majority voting rule):如果分類損失函數爲0-1損失函數,分類函數爲:

                                                                 f : \mathbf{R}^{n} \rightarrow\left\{c_{1}, c_{2}, \cdots, c_{k}\right\}

則誤分類概率:P(Y \neq f(X))=1-P(Y=f(X))

對給定的實例x \in \mathcal{X},其最最近鄰的k個訓練實例點構成集合N_k(x),如果涵蓋的區域N_k(x)的類別是c_j,則誤分類率爲:

                                                            \frac{1}{k} \sum_{x_{i} \in N_{k}(x)} I\left(y_{i} \neq c_{j}\right)=1-\frac{1}{k} \sum_{x_{k} \in N_{k}(x)} I\left(y_{i}=c_{j}\right)

要使誤分類概率最小即經驗風險最小,就要使\sum_{x \in V_{f}(x)} I\left(y_{i}=c_{j}\right)最大,所以多數表決規則等價於經驗風險最小化。

3.2 k近鄰算法--kd樹

平衡kd樹

輸入:k維空間數據集T=\left\{x_{1}, x_{2}, \cdots, x_{N}\right\},其中x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(k)}\right)^{\mathrm{T}}, \quad i=1,2, \cdots, N;

輸出:kd樹

(算法描述略)

實例:

構造kd樹:

 

最近鄰分類:給定點(3, 5)實現最近鄰搜索

 1首先從根節點(7,2)出發,將當前最近鄰設爲(7,2),對該k-d tree作深度優先遍歷。以(3,5)爲圓心,其到(7,2)的距離爲半徑畫        圓(多維空間爲超球面),可以看出(8,1)右側的區域與該圓不相交,所以(8,1)的右子樹全部忽略。
2)接着走到(7,2)左子樹根節點(5,4),與原最近鄰對比距離後,更新當前最近鄰爲(5,4)。以(3,5)爲圓心,其到(5,4)的距離爲半徑        畫圓,發現(7,2)右側的區域與該圓不相交,忽略該側所有節點,這樣(7,2)的整個右子樹被標記爲已忽略。
3)遍歷完(5,4)的左右葉子節點,發現與當前最優距離相等,不更新最近鄰。所以(3,5)的最近鄰爲(5,4)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章