提高(boosting)方法是一種經常使用的統計學習方法,應用普遍且有效。在分類問題中,它經過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提升分類性能。算法
爲何叫」提高「方法框架
在機率近似正確(PAC)學習框架中,一個概念,若是存在一個多項式的學習算法可以學習它,而且正確率很高,稱這個概念是強可學習的,若正確率僅比隨機猜測略好,稱這個概念是弱可學習的。有趣的是有人證實了強可學習與弱可學習是等價的,那麼,若是發現了弱學習算法(比較容易找到),就有可能將它提高爲強學習算法。最具表明性的是AdaBoost算法。機器學習
大多數的提高方法都是改變訓練數據的機率分佈(訓練數據的權值分佈),針對不一樣的訓練數據分佈調用弱學習算法學習一系列弱分類器。這樣,關鍵就在於如何改變訓練數據的權值,以及如何組合這些弱分類器。AdaBoost的作法是提升那些前一輪弱分類器錯誤分類樣本的權值。函數
AdaBoost算法性能
- 輸入:訓練數據集\(T = \{(x_1,y_1), (x_2, y_2), ..., (x_N,y_N) \}\),其中\(x_i \in \mathcal{X} \subseteq R^n\),\(y_i \in \mathcal{Y} = \{-1, +1\}\);弱學習算法。
- 輸出:最終分類器\(G(x)\)
- 初始化訓練數據的權值分佈\[D_1 = (w_{11}, ...,w_{1i},...,w_{1N}), w_{1i} = \frac{1}{N}, i = 1,2,...,N\]
對\(m = 1,2,...,M\)學習
a. 使用具備權值分佈\(D_m\)的訓練數據集學習,獲得基本分類器\[G_m(x): \mathcal{X} \rightarrow \{-1, +1\}\] b. 計算\(G_m(x)\)在訓練數據集上的分類偏差率\[e_m = P(G_m(x_i)\neq y_i)=\sum_{i =1}^{N} w_{mi} I(G_m(x_i) \neq y_i)\] c. 計算\(G_x(x)\)的係數\[\alpha_m = \frac{1}{2} \log \frac{1 - e_m}{e_m}\] d. 更新訓練數據集的權值分佈\[D_{m+1} = (w_{m+1,1}, ... ,w_{m+1,i}, ..., w_{m+1,N})\] \[w_{m+1,i} = \frac{w_{mi}}{Z_m} \exp(-\alpha_m y_i G_m(x_i)), i = 1,2,...,N\],這裏,\(Z_m\)是規範因子\[Z_m = \sum_{i = 1}^N w_{wi} \exp (-\alpha_m y_i G_m(x_i))\]它使\(D_m\)成爲一個機率分佈。(簡單點就是正確的除以\(\alpha\),錯誤的乘以\alpha,規範因子不要也問題不大吧)構建基本分類器的線性組合\[f(x) = \sum_{m = 1}^M \alpha_m G_m (x)\]獲得最終的分類器\[G(x) = sign(f(x)) = sign(\sum_{m = 1}^M \alpha_m G_m(x))\]優化
AdaBoost算法最終分類器的訓練偏差界爲:\[\frac{1}{N} \sum_{i = 1}^N I(G(x_i) \neq y_i) \leq \frac{1}{N} \sum_i \exp (-y_i f(x_i)) = \prod_m Z_m\]spa
在每一輪選取適當的\(G_m\)使得\(Z_m\)最小,從而使訓練偏差降低最快。blog
二分類問題AdaBoost的訓練偏差界:\[\prod_{m = 1}^M Z_m = \prod_{m = 1} ^M [2\sqrt{e_m(1-e_m)} ] = \prod _{m=1}^M \sqrt{(1 - 4\gamma_m^2)} \leq \exp (-2\sum_{m=1}^M \gamma_m^2)\]這裏,\(\gamma_m = \frac{1}{2} - e_m.\)get
若是存在\(\gamma > 0\),對全部\(m\)有\(\gamma_m \geq \gamma\),則\[\frac{1}{N} \sum_{i = 1}^N I(G(x_i) \neq y_i) \leq \exp (-2M\gamma^2)\]
這代表在此條件下,AdaBoost的訓練偏差是以指數速率降低的。
可認爲AdaBoost算法是模型爲加法模型,損失函數爲指數函數,學習算法爲前向分步算法時的二分類學習方法。能夠由前向分步算法推導出AdaBoost。
加法模型\[f(x) = \sum_{m = 1}^M \beta_m b(x; \gamma_m)\],其中,\(b(x; \gamma_m)\)爲基函數,\(\gamma_m\)爲基函數的參數,\(\beta_m\)爲基函數的係數。
每一步中極小化損失函數\[(\beta_m, \gamma_m) = \arg \min_{\beta_m, \gamma_m} \sum_{i = 1}^N L(y_i, f_{m-1}(x_i) + \beta b(x_i; \gamma))\]
提高樹是以分類樹或迴歸樹爲基本分類器的提高方法。提高樹被認爲是統計學習中性能最好的方法之一。
提高樹模型
\[f_M(x) = \sum_{m - 1}^M T(x; \Theta_m)\]其中,\(T(x; \Theta_m)\)表示決策樹;\(\Theta_m\)爲決策樹的參數;\(M\)爲樹的個數。
提高樹算法
與AdaBoost相似,對於二分類問題,提高樹算法只需將AdaBoost中的基本分類器限制爲二類分類樹便可。對於迴歸問題,採用如下前向分步算法:\[f_0(x) = 0\] \[f_m(x) = f_{m-1}(x) + T(x; \Theta_m), m = 1,2,...,M\] \[f_M(x) = \sum_{m=1}^M T(x; \Theta_m)\] 在前向分步算法的第\(m\)步,給定當前模型\(f_{m-1}(x)\),需求解\[\hat{\Theta}_m = \arg \min_{\Theta_m} \sum_{i =1}^N L(y_i, f_{m-1}(x_i) + T(x_i; \Theta_m))\]獲得第\(m\)棵樹的參數。
當採用平方偏差損失函數時,損失函數化簡爲:\[[r - T(x; \Theta_m)]^2\],其中\[r = y - f_{m-1}(x)\]是當前模型擬合數據的殘差。
- 迴歸問題的提高樹算法
- 初始化\(f_0(x) = 0\)
對\(m = 1, 2, ...,M\)
- 計算殘差\(r_{mi} = y_i - f_{m-1}(x_i), i = 1, 2, ..., N\)
- 擬合殘差\(r_{mi}\)學習一個迴歸樹,獲得\(T(x; \Theta_m)\)
- 更新\(f_m(x) = f_{m-1}(x) + T(x; \Theta_m)\)
獲得迴歸問題提高樹\[f_M(x) = \sum_{m -1}^M T(x; \Theta_m)\]
(注:本文爲讀書筆記與總結,側重算法原理,來源爲《統計學習方法》一書第八章)
做者:rubbninja
出處:http://www.cnblogs.com/rubbninja/ 關於做者:目前主要研究領域爲機器學習與無線定位技術,歡迎討論與指正!