李航-統計學習方法-筆記-8:提升方法


提升方法

簡述:提升方法(boosting)是一種常用的統計學習方法,應用廣泛且有效。在分類問題中,它通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類的性能。

本章
(1)介紹boosting方法的思路和代表性的boosting算法AdaBoost
(2)通過訓練誤差分析探討AdaBoost為什么能提高學習精度
(3)從前向分布加法模型的角度解釋AdaBoost
(4)最后敘述boosting方法更具體的實例——boosting tree(提升樹)

boosting基本思路:boosting基於這樣一種思想:對於一個復雜任務來說,將多個專家的判斷進行適當的綜合所得出的判斷,要比其中任何一個專家單獨的判斷好。實際上就是“三個臭皮匠,頂個諸葛亮”的道理。

強可學習:在概率近似正確(probably approximately correct,PAC)學習的框架中,一個概念,如果存在一個多項式的學習算法能夠學習它,並且正確率很高,那么稱這個概念是強可學習的。

弱可學習:一個概念,如果存在一個多項式的學習算法能夠學習它,學習的正確率僅比隨機猜測略好,那么稱為弱可學習的。

強可學習和弱可學習:Schapire證明了強可學習與弱可學習是等價的,也就是說,在PAC學習的框架下,一個概念是強可學習的充要條件是這個概念是弱可學習的。

從弱學習到強學習:可將“弱學習”提升為“強學習”,弱學習算法通常比強學習算法容易得多。具體如何實施提升,便稱為開發提升方法時要解決的問題。有很多提升算法被提出,最具代表性的就是AdaBoost。

提升方法就是從弱學習算法出發,反復學習,得到一系列弱分類器(又稱為基分類器),然后組合這些弱分類器,構成一個強分類器。大多數的提升方法都是改變訓練數據的概率分布(訓練數據的權重分布),針對不同的訓練數據分布,調用弱學習算法學習一系列弱分類器。這里就有兩個問題。
(1)在每一輪如何改變訓練數據的權值或概率分布
(2)如何將弱分類器組合成一個強分類器

AdaBoost

對於前面提到的兩個問題,AdaBoost的做法是
(1)提高那些被前一輪弱分類器錯誤分類樣本的權重,降低那些被正確分類樣本的權重。這樣一來,那些沒有得到正確分類的數據,由於權值的加大而受到后一輪的弱分類器的更大關注。
(2)加權多數表決,加大分類器誤差小的弱分類器的權值,使其在表決中起較大的作用,減小分類誤差大的弱分類器的權值,使其在表決中起較小的作用。

算法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 \{-1, +1\}\)。弱學習算法。

輸出:最終分類器\(G(x)\)

(1)初始化訓練數據的權值分布

\[D_1 = (w_{11}, ..., w_{1i}, ..., w_{1N}), \ w_{1i} = \frac{1}{N}, \ i = 1,2, ..., N \]

這里假設了數據具有均勻的權值分布,每個樣本在基分類器的學習作用相同。

(2)對\(m=1, 2, ..., M\)

(a) 用權值分布為\(D_m\)的訓練數據學習,得到基分類器\(G_m(x): \mathcal{X} \to \{+1, -1\}\)

(b) 計算\(G_m(x)\)在訓練集上的分類誤差率

\[e_m = \sum_{i=1}^{N} P(G_m(x_i) \neq y_i) = \sum_{G_m(x_i) \neq y_i }w_{mi} \]

\(w_{mi}\)表示第\(m\)輪中第\(i\)個實例的權值,\(\sum_{i=1}^N w_{mi} = 1\)。這表明,\(G_m(x)\)在加權的訓練集上的分類誤差率是被\(G_m(x)\)誤分類樣本的權重之和。

(c) 計算\(G_m(x)\)的系數\(\alpha_m = \frac{1}{2} \log \frac{1- e_m}{e_m}\),對數為自然對數。\(\alpha_m\)表示\(G_m(x)\)在最終分類器中的重要性。\(e_m \leqslant 0.5\)\(\alpha_m \geqslant 0\),而且\(\alpha_m\)隨着\(e_m\)的減小而增大,分類誤差越小的基分類器在最終分類器中的作用越大。

(d) 更新訓練集的權值分布,為下一輪做准備

\[D_{m+1} = (w_{m+1, 1}, ..., w_{m+1, i}, ..., w_{m+1, N}) \]

\[w_{m+1, i} = \left\{\begin{matrix} \frac{w_{mi}}{Z_m}e^{-\alpha_m}, & G_m(x_i) = y_i\\ \frac{w_{mi}}{Z_m}e^{\alpha_m}, & G_m(x_i) \neq y_i \end{matrix}\right. \tag{8.4}\]

\[Z_m = \sum_{i=1}^N w_{mi} exp(-\alpha_m y_i G_m(x_i)) \tag{8.5} \]

其中\(Z_m\)為規范化因子。
誤分類樣本權值變大,正確分類樣本權值縮小,兩相比較放大了\(\frac{1-e_m}{e_m}\)倍。

(3)構建基分類器的線性組合

\[f(x) = \sum_{m=1}^M \alpha_m G_m(x) \tag{8.6} \]

最終分類器為

\[G(x) = sign(f(x)) \tag{8.7} \]

注意\(\alpha_m\)之和不為1。

AdaBoost算法的訓練誤差分析

AdaBoost最基本的性質是它能在學習過程中不斷減少訓練誤差。

定理8.1(AdaBoost的訓練誤差界):AdaBoost算法最終分類器的訓練誤差界為

\[\frac{1}{N} \sum_{i=1}^{N} I(G(x_i) \neq y_i) \leqslant \frac{1}{N} \sum_i exp(-y_i f(x_i)) = \prod_m Z_m \]

證明:當\(G(x_i) \neq y_i\)時,\(y_i f(x_i) < 0\),所以\(exp(-y_i f(x_i)) \geqslant 1\),推導出前半部分。

后半部分推導用到式\((8.4)\)的變形:

\[w_{mi} exp(-\alpha_m y_i G_m(x_i)) = Z_m w_{m+1,i} \]

推導如下:

\[\begin{split} & \frac{1}{N} \sum_i exp(-y_i f(x_i)) \\ &= \frac{1}{N} \sum_i exp(-\sum_{m=1}^M \alpha_m y_i G_m(x_i)) \\ &= \sum_i w_{1i} \prod_{m=1}^M exp(-\alpha_m y_i G_m(x_i)) \\ &= Z_1 \sum_i w_{2i} \prod_{m=2}^M exp(-\alpha_m y_i G_m(x_i)) \\ &= Z_1 Z_2 \sum_i w_{3i} \prod_{m=3}^M exp(-\alpha_m y_i G_m(x_i)) \\ &= ... \\ &= Z_1 Z_2 ... Z_{M-1} \sum_i w_{Mi} exp(-\alpha_m y_i G_m(x_i)) \\ &= \prod_{m=1}^M Z_m \end{split}\]

這一定理說明,可以在每一輪選取恰當的\(G_m\)使得\(Z_m\)最小,從而使訓練誤差下降最快。

定理8.2(二分類問題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} \leqslant exp(-2\sum_{m=1}^M \gamma_m^2) \]

這里\(\gamma_m = \frac{1}{2} - e_m\)
證明:由\(Z_m\)的定義式\((8.5)\)以及式\((8.1)\)

\[\begin{split} Z_m &= \sum_{i=1}^N w_{mi} exp(-\alpha_m y_i G_m(x_i) \\ &= \sum_{y_i = G_m(x_i)} w_{mi} e^{-\alpha_m} + \sum_{y_i \neq G_m(x_i)} w_{mi} e^{\alpha_m} \\ &= (1-e_m)e^{-\alpha_m} + e_m e^{\alpha_m} \\ &= 2 \sqrt{e_m (1 - e_m)} = \sqrt{1 - 4\gamma_m^2 } \end{split} \tag{8.11}\]

至於不等式$exp(-2\sum_{m=1}^M \gamma_m^2) \geqslant\prod_{m=1}^M \sqrt{1-4\gamma_m^2} $

可由\((e^{-2x^2})^2\)\(x=0\)的泰勒展開得到\((e^{-2x^2})^2 \geqslant 1 - 4x^2\)進而推出。

推論8.1:如果存在\(\gamma > 0\),對所有\(m\)\(\gamma_m \geqslant \gamma\),則

\[\frac{1}{N} \sum_{i=1}^N I(G(x_i) \neq y_i) \leqslant exp(-2M\gamma^2) \]

這表明在此條件下AdaBoost的訓練誤差是以指數速率下降的,這一性質當然很有吸引力。

與一些早期的提升方法不同,AdaBoost具有適應性,即它能適應弱分類器各自的訓練誤差率。這也是它名稱的由來,Ada是Adaptive的簡寫。

AdaBoost算法的解釋

前向分步算法
考慮加法模型

\[f(x) = \sum_{m=1}^M \beta_m b(x; \gamma_m) \]

其中\(b(x; \gamma_m)\)為基函數,\(\gamma_m\)為基函數的參數,\(\beta_m\)為基函數的系數。

在給定訓練集和損失函數\(L(y, f(x))\)的條件下,學習加法模型\(f(x)\)成為經驗風險極小化即損失函數極小化問題:

\[\min_{\beta_m, \gamma_m} \sum_{i=1}^N L(y_i, \sum_{m=1}^M \beta_m b(x_i; \gamma_m)) \tag{8.14} \]

通常這是一個復雜的優化問題。前向分步算法求解這一優化問題的想法是:從前向后,每一步只學習一個基函數及其系數,逐步逼近優化目標函數式\((8.14)\),那么就可以簡化優化的復雜度。每步優化如下損失:

\[\min_{\beta, \gamma} \sum_{i=1}^N L(y_i, \beta b(x_i; \gamma)) \]

前向分布算法與AdaBoost
可認為AdaBoost是模型為加法模型,損失函數為指數函數,學習算法為前向分步算法時的二分類學習方法。

由前向分步算法可以推導出AdaBoost,用定理敘述這一關系。

定理8.3:AdaBoost算法是前向分步加法算法的特例。這時,模型是由基本分類器組成的加法模型,損失函數是指數函數。

證明:AdaBoost最終分類器為\(f(x) = \sum_{i=1}^M \alpha_m G_m(x)\),由基分類器\(G_m(x)\)及其系數\(\alpha_m\)組成,\(m=1, 2, ..., M\)。前向分步算法逐一學習基函數,這一過程與AdaBoost算法逐一學習基分類器一致。

下面證明前向分步算法的損失函數是指數損失函數

\[L(y, f(x)) = exp[-yf(x)] \]

在第\(m\)輪迭代得到

\[f_m(x) = f_{m-1}(x) + \alpha_m G_m(x) \]

目標是使前向分步算法得到的\(\alpha_m\)\(G_m(x)\)使\(f_m(x)\)在訓練數據集\(T\)上的指數損失最小,即

\[(\alpha_m, G_m(x)) = \arg \min_{\alpha, G} \sum_{i=1}^N exp [ -y_i(f_{m-1}(x_i) + \alpha G(x_i))] \tag{8.20} \]

可表示為

\[(\alpha_m, G_m(x)) = \arg \min_{\alpha, G} \sum_{i=1}^N \bar{w}_{mi} exp [ -y_i \alpha G(x_i)] \tag{8.21} \]

其中\(\bar{w}_{mi} = exp [-y_i f_{m-1}(x_i)]\)。因為\(\bar{w}_{mi}\)既不依賴\(\alpha\)也不依賴\(G\),所以與最小化無關。但\(\bar{w}_{mi}\)依賴於\(f_{m-1}(x)\),隨着每一輪迭代而發生改變。

對任意\(\alpha > 0\),使\((8.21)\)最小的\(G(x)\)由下式得到:

\[G_m^*(x) = \arg \min_{G} \sum_{i=1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) \]

此分類器\(G_m^*(x)\)即為AdaBoost算法的基本分類器\(G_m(x)\),因為它是使第\(m\)輪加權訓練數據分類誤差率最小的基本分類器。

之后,求\(\alpha_m^*\),參照式\((8.11)\),式\((8.21)\)

\[\begin{split} &\sum_{i=1}^N \bar{w}_{mi} exp [ -y_i \alpha G(x_i)] \\ &= \sum_{y_i = G_m(x_i)} \bar{w}_{mi} e^{-\alpha} + \sum_{y_i \neq G_m(x_i)} \bar{w}_{mi} e^{\alpha} \\ &= (e^{\alpha} - e^{-\alpha}) \sum_{i=1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) + e^{-\alpha} \sum_{i=1}^N \bar{w}_{mi} \end{split} \tag{8.22}\]

將已求得的\(G_m^*(x)\)代入式\((8.22)\),對\(\alpha\)求導並使導數為0,即得到使式\((8.21)\)最小的\(\alpha\)

\[\alpha_m^* = \frac{1}{2} \log \frac{1-e_m}{e_m} \]

其中\(e_m\)是分類誤差率

\[e_m = \frac{\sum_{i=1}^N \bar{w}_{mi} I(y_i \neq G_m(x_i))}{\sum_{i=1}^N \bar{w}_{mi}} = \sum_{i=1}^N w_{mi} I(y_i \neq G_m(x_i)) \]

這里的\(\alpha_m^*\)與AdaBoost算法第2(c)步的\(\alpha_m\)完全一致。

最后來看每一輪樣本權值的更新,由

\[f_m(x) = f_{m-1}(x) + \alpha_m G_m(x) \]

以及$$\bar{w}{mi} = exp[-y_i f{m-1}(x_i)]$$
可到

\[\bar{w}_{m+1, i} = \bar{w}_{m,i} exp [-y_i \alpha_m G_m(x)] \]

這與AdaBoost算法第2(d)步的樣本權值更新,只差規范化因子,因而等價。

提升樹

提升樹簡述

提升樹被認為是統計學習中性能最好的方法之一。

提升方法實際采用加法模型(即基函數的線性組合)與前向分步算法。以決策樹為基函數的提升方法稱為提升樹(boosting tree)。

提升樹模型可以表示為決策樹的加法模型:

\[f_M(x) = \sum_{m=1}^{M} T(x; \theta_m) \]

其中,\(T(x; \theta_m)\)表示決策樹,\(\theta_m\)為決策樹的參數,\(M\)為樹的個數。

\(m\)步的模型是\(f_m(x) = f_{m-1}(x) + T(x; \theta_m)\)

其中,\(f_{m-1}(x)\)為當前模型,通過經驗風險極小化確定下一棵決策樹的參數\(\theta_m\)

\[\hat{\theta}_m = \arg \min_{\theta_m} \sum_{i=1}^N L(y_i, f_{m-1}(x_i) + T(x_i ; \theta_m)) \]

由於樹的線性組合可以很好地擬合訓練數據,即使數據中的輸入與輸出之間的關系很復雜。所以提升樹是一個高功能的學習算法。

提升樹的學習算法:下面討論對不同問題的提升樹學習算法,其主要區別在於使用的損失函數不同。包括用指數損失的分類問題,用平方損失的回歸問題,以及用一般損失的一般決策問題。

對於二分類問題,只需將AdaBoost的基分類器限制為二分類樹即可。

回歸問題的提升樹,將輸入空間\(\mathcal{X}\)划分為\(J\)個互不相交的區域\(R_1, R_2, ..., R_J\),並且在每個區域上確定輸出的常量\(c_j\),那么樹可以表示為

\[T(x_i; \theta) = \sum_{j=1}^J c_j I(x \in R_j) \]

其中,參數\(\theta= \{(R_1, c_1), (R_2, c_2), ..., (R_J, c_J),\}\)表示樹的區域划分和各區域上的常數。\(J\)是回歸樹的復雜度即葉結點個數。

使用以下前向分步算法

\[\begin{split} f_0(x) &= 0 \\ f_m(x) &= f_{m-1}(x) + T(x; \theta_m), \ \ m=1,2,...,M \\ f_M(x) &= \sum_{i=1}^M T(x; \theta_m)\end{split}\]

在前向分步算法的第\(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)) \]

得到\(\hat{\theta}_m\),即第\(m\)棵樹的參數。

當采用平方損失時

\[\begin{split} &L(y, f_{m-1}(x) + T(x;\theta_m)) \\ &= [y - f_{m-1}(x) - T(x; \theta_m)]^2 \\ &= [r - T(x; \theta_m)]^2 \end{split}\]

這里,\(r= y - f_{m-1}(x)\),是當前模型擬合數據的殘差。所以,對回歸問題的提升樹算法來說,只需簡單地擬合當前模型的殘差。

梯度提升
提升樹利用加法模型與前向分步算法實現學習的優化過程。當損失函數是平方損失和指數損失時,每一步優化是簡單的。

但對一般損失函數而言,往往每一步優化並不容易。針對這一問題,Freidman提出了梯度提升(gradient boosting)算法。這是利用最速下降法的近似方法,其關鍵是利用損失函數的負梯度在當前模型的值

\[-[\frac{\partial L(y, f(x_i))}{\partial f(x_i)}]_{f(x) = f_{m-1}(x)} \]

作為回歸問題提升樹算法中殘差的近似值,擬合一個回歸樹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM