提高方法是一種經常使用的統計學習方法,應用十分普遍且有效。在分類問題中,它經過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提升分類的性能。提高算法基於這樣一種思路:對於一個複雜任務來講,將多個專家的判斷進行適當的綜合所得出的判斷,要比其中任何一個專家專斷的判斷好。實際上,就是「三個臭皮匠頂個諸葛亮」的道理。算法
歷史上,Kearns和Valiant首先提出了「強可學習(Strongly learnable)」和「弱可學習(Weekly learnable)」的概念。支出:在機率近似正確(probably approximately correct,PAC)學習框架中,一個概念(一個分類),若是存在一個多項式的學習算法可以學習它,而且正確率很好,那麼就稱這個概念是強可學習的;一個概念(一個分類),若是存在一個多項式的學習算法可以學習它,但學習的正確率僅比隨機猜想略好,那麼就稱這個概念是弱可學習的。很是有趣的是Schapire後來證實強可學習與弱可學習是等價的,也就是說,在PAC學習框架下,一個概念是強可學習的充要條件是這個概念是弱可學習的。api
這樣一來,問題便成爲,在學習中,若是已經發現了「弱學習算法」,那麼可否將它提高(boost)爲「強學習算法」。你們知道,發現弱學習算法一般要比發現強學習算法容易得多。那麼如何具體實施提高,便成爲開發提高方法時所要解決的問題。關於提高方法的研究不少,有不少算法被提出,最具表明性的是AdaBoost算法(Adaboost algorithm)。app
對與分類問題而言,給定一個訓練樣本集,求比較粗糙的分類規則(弱分類器)要比求精確的分類規則(強分類器)容易得多。提高方法就是從弱學習算法出發,反覆學習,獲得一系列分類器,而後組合這些分類器,構成一個強分類器。框架
這樣,對於提高算法來講,有兩個問題須要回答:一是在每一輪如何改變訓練數據的權值分佈;二是如何將弱分類器組合成一個強分類器。函數
Boosting算法要涉及到兩個部分,加法模型和前向分步算法。性能
(1) 加法模型就是說強分類器由一系列弱分類器線性相加而成。通常組合形式以下:學習
$F_M(x;P)=\sum_{m=1}^n\alpha _mh(x;\theta_m)$spa
其中$h(x;\theta_m)$是一個個的弱分類器,$\theta_m$是弱分類器學習到的最優參數;$\alpha_m$就是若學習在強分類器中所佔的比重;$P$是全部$\alpha_m$和$\theta_m$的組合。這些弱分類器線性相加組成強分類器。
.net
(2) 前向分佈就是說在訓練過程當中,下一輪迭代產生的分類器是在上一輪的基礎上訓練得來的。也就是能夠協成這樣的形式:設計
$F_m (x)=F_{m-1}(x)+\alpha _mh(x;\theta_m)$
因爲採用的損失函數不一樣,Boosting算法也所以有了不一樣的類型,AdaBoost就是損失函數爲指數損失的Boosting算法。
1) 提升那些被前一輪弱分類器錯誤分類的樣本的權值,下降那些被正確分類的樣本的權值;
2) 採用加權多數表決的方法。具體的,加大分類偏差率小的弱分類器的權值,使其在表決中起較大的做用;減少分類偏差率大的弱分類器的權值,使其在表決中起較小的做用。
輸入:訓練數據集$T=\{(x_1, y_1),(x_2, y_2),(x_3, y_3),...(x_n, y_n)\}$,其中$x_i\in X\subseteq \mathbb{R}^{n},y_i\in Y=\{-1,+1\}$,$Y=\{-1, +1\}$是弱分類算法。
輸出:最終分類器$G_m(x)$
初始化:假定第一次訓練時,樣本均勻分佈權值同樣。
$D_1=(w_{11}, w_{12},w_{13}......w_{1n})$
其中$w_{1i}=\frac{1}{n},i=1,2,3...n$
循環:m=1,2,3...M,
(a) 使用具備權值分佈$D_m$的訓練數據集學習,獲得基本分類器$G_m$(選取讓偏差率最低的閾值來設計基本分類器):
$G_m(x):\chi \rightarrow \{-1, +1\}$
(b) 計算$G_m(x)$在訓練集上的分類偏差率$e_m$
$e_m=P(G_m(x_i)\neq y_i)=\sum_{i=1}^{n}w_{mi}I(G_m(x_i)\neq y_i)$
$I(G_m(x_i)\neq y_i)$:當$G_m(x_i)$與$y_i$相等時,函數取值爲0;當$G_m(x_i)$與$y_i$不相等時,取值爲1;。
由上述式子可知,$G_m(x)$在訓練數據集上的偏差率$e_m$就是被$G_m(x)$誤分類樣本的權值之和。
(c) 計算$G_m(x)$的係數$\alpha_m$,$\alpha_m$表示$G_m(x)$在最終分類器中的重要程度:
$\alpha_m = \frac{1}{2}ln\frac{1-e_m}{e_m}$
【注】顯然$e_m <= 1/2$時,$\alpha_mam >= 0$,且$\alpha_m$隨着$e_m$的減少而增大,意味着分類偏差率越小的基本分類器在最終分類器中的做用越大
此時分類器爲:$f_m(x)=\alpha_mG_m(x)$
(d) 更新訓練數據集的權值分佈,用於下一輪迭代。
$D_{m+1}=(w_{m+1,1},w_{m+1,2},w_{m+1,3},...w_{m+1,n})$
$w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-y_i\alpha_mG_m(x_i))$,$i=1,2,3,...n$
其中$Z_m$是規範化因子,使得$D_{m+1}$成爲一個機率分佈。
$Z_m=\sum_{i=1}^{n}w_{mi}exp(-y_i\alpha_mG_m(x_i))$
循環結束條件:
$e_m$小於某個閾值(通常是0.5),或是達到最大迭代次數。
AdaBoost 方法中使用的分類器可能很弱(好比出現很大錯誤率),但只要它的分類效果比隨機好一點(好比兩類問題分類錯誤率略小於0.5),就可以改善最終獲得的模型。
組合分類器:
$f(x)=\sum_{m=1}^{M}\alpha_mG_m(x)$
最終分類器:
$G_m(x)=sign(f(x))=sign(\sum_{i=1}^{M}\alpha_mG_m(x))$
假定給出下列訓練樣本。
序號 | i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
數據 | x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
類別標籤 | y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
初始化:$w_{1i}=\frac{1}{n}=0.1$,n=10(樣本個數)
序號 |
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
數據 | x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
類別標籤 | y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
初始權值 | $w_{1i}$ | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 |
閾值猜想:觀察數據,能夠發現數據分爲兩類:-1和1,其中數據「0,1,2」對應「1」類,數據「3,4,5」對應「-1」類,數據「6,7,8」對應「1」類,數據「9」對應「"1」類。拋開單個的數據「9」,能夠找到對應的數據分界點(便可能的閾值),好比:2.五、5.五、8.5(通常0.5的往上加,也能夠是其餘數)。而後計算每一個點的偏差率,選最小的那個做爲閾值。
但在實際操做中,能夠每一個數據點都作爲閾值,而後就算偏差率,保留偏差率最小的那個值。若偏差率有大於0.5的就取反(分類換一下,若大於取1,取反後就小於取1),再計算偏差率。
迭代過程1:m=1
1> 肯定閾值的取值及偏差率
由上面可知,閾值取2.5 或8.5時,偏差率同樣,因此能夠任選一個做爲基本分類器。這裏選2.5爲例。
$G_1(x)=\begin{cases}1, &x<2.5 \\-1, & x>2.5 \end{cases}$
計算偏差率:
序號 | i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
數據 | x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
類別標籤 | y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
分類器結果 | $G_1(x)$ | 1 | 1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
分類結果 | 對 | 對 | 對 | 對 | 對 | 對 | 錯 | 錯 | 錯 | 對 |
從上可得$G_1(x)$在訓練數據集上的偏差率(被分錯類的樣本的權值之和):
$e_1=P(G_1(x_i)\neq y_i)=\sum_{G_1(x_i)\neq y_i}w_{1i}=0.1+0.1+0.1=0.3$
2> 計算$G_1(x)$的係數:
$\alpha_1=\frac{1}{2}ln\frac{1-e_1}{e_1}=\frac{1}{2}ln\frac{1-0.3}{0.3}\approx 0.42365$
這個$\alpha_1$表明$G_1(x)$在最終的分類函數中所佔的比重約爲0.42365
3> 分類函數
$f_1(x)=\alpha_1G_1(x)=0.42365G_1(x)$
4> 更新權值分佈:
序號 |
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
數據 | x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
類別標籤 | y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
初始權值1 | $w_{1i}$ | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 |
更新權值2 | $w_{2i}$ | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.16666 | 0.16666 | 0.16666 | 0.07143 |
由上面能夠看出,由於數據「6,7,8」被$G_1(x)$分錯了,因此它們的權值由初始的0.1增大到了0.16666;其餘的數據因爲被分對了,因此權值由0.1減少到0.07143。
迭代過程2:m=2
1> 肯定閾值的取值及偏差率
由上面可知,閾值取8.5時,偏差率最小,因此:
$G_2(x)=\begin{cases}1, &x<8.5 \\-1, & x>8.5 \end{cases}$
計算偏差率:
序號 | i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
數據 | x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
類別標籤 | y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
權值分佈 | $w_{2i}$ | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.16666 | 0.16666 | 0.16666 | 0.07143 |
分類器結果 | $G_2(x)$ | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | -1 |
分類結果 | 對 | 對 | 對 | 錯 | 錯 | 錯 | 對 | 對 | 對 | 對 |
從上可得$G_2(x)$在訓練數據集上的偏差率(被分錯類的樣本的權值之和):
$e_2=P(G_2(x_i)\neq y_i)=\sum_{G_2(x_i)\neq y_i}w_{2i}=0.07143+0.07143+0.07143=0.21429$
2> 計算$G_2(x)$的係數:
$\alpha_2=\frac{1}{2}ln\frac{1-e_2}{e_2}=\frac{1}{2}ln\frac{1-0.21429}{0.21429}\approx 0.64963$
這個$\alpha_2$表明$G_2(x)$在最終的分類函數中所佔的比重約爲0.649263
3> 分類函數
$f_2(x)=\alpha_2G_2(x)=0.64963G_2(x)$
4> 更新權值分佈:
序號 |
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
數據 | x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
類別標籤 | y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
初始權值1 | $w_{1i}$ | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 |
權值2 | $w_{2i}$ | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.16666 | 0.16666 | 0.16666 | 0.07143 |
更新權值3 | $w_{3i} | 0.04546 | 0.04546 | 0.04546 | 0.16667 | 0.16667 | 0.16667 | 0.10606 | 0.10606 | 0.10606 | 0.04546 |
迭代過程3:m=3
1> 肯定閾值的取值及偏差率
由上面可知,閾值取8.5時,偏差率最小,但8.5取過了,因此取5.5:
$G_3(x)=\begin{cases}-1, &x<5.5 \\1, & x>5.5 \end{cases}$
計算偏差率:
序號 | i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
數據 | x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
類別標籤 | y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
權值分佈 | $w_{3i}$ | 0.04546 | 0.04546 | 0.04546 | 0.16667 | 0.16667 | 0.16667 | 0.10606 | 0.10606 | 0.10606 | 0.04546 |
分類器結果 | $G_3(x)$ | -1 | -1 | -1 | -1 | -1 | -1 | 1 | 1 | 1 | 1 |
分類結果 | 錯 | 錯 | 錯 | 對 | 對 | 對 | 對 | 對 | 對 | 錯 |
從上可得$G_3(x)$在訓練數據集上的偏差率(被分錯類的樣本的權值之和):
$e_3=P(G_3(x_i)\neq y_i)=\sum_{G_3(x_i)\neq y_i}w_{3i}=0.04546+0.04546+0.04546+04546=0.18184$
2> 計算$G_3(x)$的係數:
$\alpha_3=\frac{1}{2}ln\frac{1-e_3}{e_3}=\frac{1}{2}ln\frac{1-0.18188}{0.18184}\approx 0.75197$
這個$\alpha_3$表明$G_3(x)$在最終的分類函數中所佔的比重約爲0.75197
3> 分類函數
$f_3(x)=\alpha_3G_3(x)=0.75197G_3(x)$
4> 更新權值分佈:
序號 |
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
數據 | x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
類別標籤 | y | 1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | -1 |
初始權值1 | $w_{1i}$ | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 |
權值2 | $w_{2i}$ | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.07143 | 0.16666 | 0.16666 | 0.16666 | 0.07143 |
權值3 | $w_{3i} | 0.04546 | 0.04546 | 0.04546 | 0.16667 | 0.16667 | 0.16667 | 0.10606 | 0.10606 | 0.10606 | 0.04546 |
更新權值4 | $w_{4i} | 0.12500 | 0.12500 | 0.12500 | 0.10185 | 0.10185 | 0.10185 | 0.06481 | 0.06481 | 0.06481 | 0.12500 |
迭代過程4:m=4
此時觀察數據,每次迭代被分錯的數據都已經從新分配過權值,按其餘參考資料來講,此時的偏差率爲0,因此迭代能夠到此結束。
最終分類器:
$G_m(x)=sign(0.42365G_1(x)+0.64963G_2(x)0.75197G_3(x))$
---------------------
參考文獻:
原文:https://blog.csdn.net/gyqjn/article/details/45501185