本文致力于闡述AdaBoost基本步驟涉及的每一個公式和公式為什么這么設計。
AdaBoost集成學習算法基本上遵從Boosting集成學習思想,通過不斷迭代更新訓練樣本集的樣本權重分布獲得一組性能互補的弱學習器,然后通過加權投票等方式將這些弱學習器集成起來得到性能較優的集成模型。
圖1:Boosting集成算法思想。
下面以二分類任務(標簽不是為-1,就是為+1)為例介紹該算法的具體過程。值得注意的是,下面的公式推導是以二分類任務下得出來,所以公式(比如樣本權重更新公式)才會顯得比較整潔,但如果換成其他任務,如多分類,那么公式會復雜很多。
對于訓練樣本集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x n , y n ) D={\left(x_1,y_1\right),\left(x_2,y_2\right),\ldots,(x_n,y_n)} D=(x1?,y1?),(x2?,y2?),…,(xn?,yn?),其中標簽 y i ∈ { ? 1 , + 1 } y_i\in\left\{-1,+1\right\} yi?∈{?1,+1},由AdaBoost集成學習算法構造集成模型的基本步驟如下:
(1)令 i = 1 i=1 i=1并設定弱學習器的數目m。對應第一次迭代,使用均勻分布初始化訓練樣本集的權重分布,令 n n n維向量 w i \mathbf{w}^i wi表示第 i i i次需更新的樣本權重,則有:
w 1 = ( w 11 , w 12 , … , w 1 n ) T = ( 1 n , 1 n , … , 1 n ) T \mathbf{w}^1=\left(w_{11},w_{12},\ldots,w_{1n}\right)^T=\left(\frac{1}{n},\frac{1}{n},\ldots,\frac{1}{n}\right)^T w1=(w11?,w12?,…,w1n?)T=(n1?,n1?,…,n1?)T
(2)使用權重分布為 w i \mathbf{w}^i wi,此時 i = 1 i=1 i=1的訓練樣本集 D i D_i Di?學習得到第 i i i個弱學習器 L i L_i Li?;
(3)計算 L i L_i Li?在訓練樣本集 D i D_i Di?上的分類錯誤率 e i e_i ei?:
e i = ∑ k = 1 n w i k I ( L i ( X k ) ≠ y k ) e_i=\sum_{k=1}^{n}{w_{ik}I \left(L_i\left(X_k\right)\neq y_k\right) } ei?=∑k=1n?wik?I(Li?(Xk?)=yk?)
(4)確定弱學習器 L i L_i Li?的組合權重 α i \alpha_i αi?( α i \alpha_i αi?在最后得到最終的集成模型上用到)。由于弱學習器 L i L_i Li?的權重取值應與其分類性能相關,對于分類錯誤率 e i e_i ei?越小的 L i L_i Li?,則其權重 α i \alpha_i αi?應該越大,故有:
α i = 1 2 ln 1 ? e i e i = 1 2 ln ( 1 e i ? 1 ) \alpha_i=\frac{1}{2}\text{ln}\frac{1-e_i}{e_i}=\frac{1}{2}\text{ln}(\frac{1}{e_i}-1) αi?=21?lnei?1?ei??=21?ln(ei?1??1)
可能會有人會為,為什么要這么設計 α i \alpha_i αi??我在下面給出了解釋。
(5)(重點)依據弱學習器 L i L_i Li?對訓練樣本集 D i D_i Di?的分類錯誤率 e i e_i ei?更新樣本權重,樣本權重更新公式為:
w i + 1 , j = w i j exp ? ( ? α i y k L i ( x k ) ) Z i w_{i+1,j}=\frac{w_{ij}\exp(-\alpha_iy_kL_i(x_k))}{Z_i} wi+1,j?=Zi?wij?exp(?αi?yk?Li?(xk?))?
其中:
Z i = ∑ k = 1 n w i j exp ? ( ? α i y k L i ( X k ) ) Z_i=\sum_{k=1}^{n}{w_{ij}\exp(-\alpha_iy_kL_i(X_k))} Zi?=∑k=1n?wij?exp(?αi?yk?Li?(Xk?))
為歸一化因子,保證更新后權重向量為概率分布;
對權重更新公式的解釋:
回顧開頭,這是一個二分類任務,所以若樣本 ( x k , y k ) (x_k,y_k) (xk?,yk?)分類正確,則要不 y k = L i ( x k ) = 1 y_k=L_i(x_k)=1 yk?=Li?(xk?)=1,要不 y k = L i ( x k ) = ? 1 y_k=L_i(x_k)=-1 yk?=Li?(xk?)=?1,因此有 y k ? L i ( x k ) = 1 y_k*L_i(x_k)=1 yk??Li?(xk?)=1**。**若樣本 ( x k , y k ) (x_k,y_k) (xk?,yk?)分類錯誤,則要不 y k = ? 1 , L i ( x k ) = 1 y_k=-1,L_i(x_k)=1 yk?=?1,Li?(xk?)=1,要不 y k = 1 , L i ( x k ) = ? 1 y_k=1,L_i(x_k)=-1 yk?=1,Li?(xk?)=?1,因此有 y k ? L i ( x k ) = ? 1 y_k*L_i(x_k)=-1 yk??Li?(xk?)=?1。
因此公式
w i + 1 , j = w i j exp ? ( ? α i y k L i ( x k ) ) Z i w_{i+1,j}=\frac{w_{ij}\exp(-\alpha_iy_kL_i(x_k))}{Z_i} wi+1,j?=Zi?wij?exp(?αi?yk?Li?(xk?))?
可以改寫
w i + 1 , j = { w i j Z i exp ? ( ? α i ) , y k = L i ( x k ) w i j Z i exp ? ( α i ) , y k ≠ L i ( x k ) w_{i+1,j}=\begin{cases} \frac{w_{ij}}{Z_i}\exp(-\alpha_i),y_k=L_i(x_k) \\\frac{w_{ij}}{Z_i}\exp(\alpha_i),y_k\ne L_i(x_k) \end{cases} wi+1,j?={Zi?wij??exp(?αi?),yk?=Li?(xk?)Zi?wij??exp(αi?),yk?=Li?(xk?)?
這樣,對于錯誤的樣本會被放大 1 ? e i e i \frac{1-e_i}{e_i} ei?1?ei??倍,以便在后續弱學習器構造過程得到應有的重視。
為什么是 1 ? e i e i \frac{1-e_i}{e_i} ei?1?ei??倍?
w i + 1 , j , y k ≠ L i ( x k ) w i + 1 , j , y k = L i ( x k ) = w i j Z i exp ? ( α i ) w i j Z i exp ? ( ? α i ) = exp ? ( α i ) exp ? ( ? α i ) = e 2 ? α i = e 2 ? 1 2 ln 1 ? e i e i = e ln 1 ? e i e i = 1 ? e i e i \frac{w_{i+1,j},y_k\ne L_i(x_k)}{w_{i+1,j},y_k=L_i(x_k)}=\frac{\frac{w_{ij}}{Z_i}\exp(\alpha_i)}{\frac{w_{ij}}{Z_i}\exp(-\alpha_i)} =\frac{\exp(\alpha_i)}{\exp(-\alpha_i)}=e^{2*\alpha_i}=e^{2*\frac{1}{2}\text{ln}\frac{1-e_i}{e_i}}=e^{\text{ln}\frac{1-e_i}{e_i}}=\frac{1-e_i}{e_i} wi+1,j?,yk?=Li?(xk?)wi+1,j?,yk?=Li?(xk?)?=Zi?wij??exp(?αi?)Zi?wij??exp(αi?)?=exp(?αi?)exp(αi?)?=e2?αi?=e2?21?lnei?1?ei??=elnei?1?ei??=ei?1?ei??
另外 Z i Z_i Zi?的作用是歸一化,使得 ∑ j = 1 n w i + 1 , j = 1 \sum_{j=1}^{n}{w_{i+1,j}}=1 ∑j=1n?wi+1,j?=1
(6)若 i < m i<m i<m,則令 i = i + 1 i=i+1 i=i+1并返回步驟(2),否則執行步驟(7);
(7)對于 m m m個弱分類器 L 1 , L 2 , … , L m L_1{,L}_2,\ldots,L_m L1?,L2?,…,Lm?,分別將每個 L i L_i Li?按權重 α i \alpha_i αi?進行組合:
L = sign ( ∑ i = 1 m α i L i ( X ) ) L=\text{sign}(\sum_{i=1}^{m}{\alpha_iL_i(X)}) L=sign(∑i=1m?αi?Li?(X))
得到并輸出所求集成模型 L L L,算法結束。
參考資料:《機器學習及其應用》汪榮貴等編著