Adaboost算法

鏈接:
1. 線性回歸總結
2. 正則化
3. 邏輯回歸
4. Boosting
5. Adaboost算法


轉自:原地址
提升方法(boosting)是一種常用的統計學習方法,應用廣泛且有效。在分類問題中,它通過改變訓練樣本的權重,學習多個分類器,并將這些分類器進行線性組合,提高分類的性能。
本章首先介紹提升方法的思路和代表性的提升算法AdaBoost,然后通過訓練誤差分析探討AdaBoost為什么能夠提高學習精度,并且從前向分布加法模型的角度解釋AdaBoost,最后敘述提升方法更具體的事例——提升術(boosting tree)。AdaBoost算法是1995年由Freund和Schapire提出的,提升樹是2000年由Friedman等人提出的。(開頭幾段內容來自《統計學習方法》)
Adaboost算法基本原理

提升方法的基本思路
提升方法是基于這樣一種思想:對于一個復雜任務來說,將多個專家的判斷進行適當的綜合所得出的判斷,要比其中任何一個專家單獨的判斷好。通俗點說,就是”三個臭皮匠頂個諸葛亮”。
Leslie Valiant首先提出了“強可學習(strongly learnable)”和”弱可學習(weakly learnable)”的概念,并且指出:在概率近似正確(probably approximately correct, PAC)學習的框架中,一個概念(一個類),如果存在一個多項式的學習算法能夠學習它,并且正確率很高,那么就稱這個概念是強可學習的,如果正確率不高,僅僅比隨即猜測略好,那么就稱這個概念是弱可學習的。2010年的圖靈獎給了L. Valiant,以表彰他的PAC理論
。非常有趣的是Schapire后來證明強可學習與弱可學習是等價的,也就是說,在PAC學習的框架下,一個概念是強可學習的充要條件是這個概念是可學習的。
這樣一來,問題便成為,在學習中,如果已經發現了“弱學習算法”,那么能否將它提升(boost)為”強學習算法”。大家知道,發現弱學習算法通常比發現強學習算法容易得多。那么如何具體實施提升,便成為開發提升方法時所要解決的問題。關于提升方法的研究很多,有很多算法被提出。最具代表性的是AdaBoost算法(Adaptive Boosting Algorithm),可以說,AdaBoost實現了PAC的理想。
對于分類問題而言,給定一個訓練數據,求一個比較粗糙的分類器(即弱分類器)要比求一個精確的分類器(即強分類器)容易得多。提升方法就是從弱學習算法出發,反復學習,得到一系列弱分類器,然后組合這些弱分類器,構成一個強分類器。大多數的提升方法都是改變訓練數據的概率分布(訓練數據中的各個數據點的權值分布),調用弱學習算法得到一個弱分類器,再改變訓練數據的概率分布,再調用弱學習算法得到一個弱分類器,如此反復,得到一系列弱分類器。
這樣,對于提升方法來說,有兩個問題需要回答:一是在每一輪如何如何改變訓練數據的概率分布;而是如何將多個弱分類器組合成一個強分類器。
關于第一個問題,AdaBoost的做法是,提高那些被前幾輪弱分類器線性組成的分類器錯誤分類的的樣本的權值。這樣一來,那些沒有得到正確分類的數據,由于權值加大而受到后一輪的弱分類器的更大關注。于是,分類問題被一系列的弱分類器”分而治之”。至于第二個問題,AdaBoost采取加權多數表決的方法。具體地,加大分類誤差率小的弱分類器的權值,使其在表決中起較大的作用,減小分類誤差率大的弱分類器的權值,使其在表決中起較小的作用。
AdaBoost的巧妙之處就在于它將這些想法自然而然且有效地實現在一種算法里。

AdaBoost算法
輸入:訓練數據集T={(x1,y1),(x2,y2),…,(xN,yN)},其中xi∈X?Rn,表示輸入數據,yi∈Y={-1,+1},表示類別標簽;弱學習算法。
輸出:最終分類器G(x)。
流程:
初始化訓練數據的概率分布,剛開始為均勻分布

D1=(w11,w12,…,w1N), 其中w1i=



, i=1,2,..,N . Dm表示在第m輪迭代開始前,訓練數據的概率分布(或權值分布),wmi表示在第i個樣本的權值,



。對m=1,2,…,M,使用具有權值分布Dm的訓練數據集進行學習(任意選一種模型都可以,例如樸素貝葉斯,決策樹,SVM等,并且每一輪迭代都可以用不同的模型),得到一個弱分類器

計算Gm(x)在訓練數據集上的分類誤差率



計算弱分類器Gm(x)的系數

更新訓練數據的權值分布


這里,Zm是規范化因子


這樣

,它使Dm+1稱為一個概率分布。將M個基本分類器進行線性組合


得到最終分類器


對AdaBoost算法作如下說明:
步驟(1) 初始時假設訓練數據集具有均勻分布,即每個訓練樣本在弱分類器的學習中作用相同。
步驟(2) (c) αm表示Gm(x)在最終分類器中的重要性。由式(公式 2)可知,當em ≤1/2時,αm≥0,并且αm隨著em的減小而增大,即意味著誤差率越小的基本分類器在最終分類器中的作用越大。
(d) 式可以寫成:


由此可知,被弱分類器Gm(x)誤分類的樣本的權值得以擴大,而被正確分類的樣本的權值得以縮小。因此誤分類樣本在下一輪學習中起到更大的作用。不改變所給的訓練數據,而不斷改變訓練數據權值的分布,使得訓練數據在基本分類器的學習中起不同的作用,這是AdaBoost的一個特點。
步驟(3) 這里,αm之和并不等于1。f(x)的符號決定實例x的類別,f(x)的絕對值表示分類的確信度。利用基本分類器進行線性組合得到最終分類器是AdaBoost的另一個特點。

AdaBoost的例子
例 1 給定如表 1所示訓練數據。假設弱分類器由G(x)=sign(x-v)產生,其中v為常量,表示閥值。試用AdaBoost算法學習一個強分類器。
表 1 訓練數據樣本

序號 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

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

當m=1,進行第一輪迭代
在權值分布為D1的情況下,用一根垂直掃描線從左到右掃描,會發現,閥值v取2.5時分類誤差率最低,故基本分類器G1(x)=sign(x-2.5)。

G1(x)在訓練數據集上的誤差率

,第7,8,9個實例被誤分類。

計算G1(x)的系數:

=0.4236。

更新訓練數據的權值分布:


分類器sign[f1(x)]在訓練數據集上有3個誤分類點,因此,繼續迭代。
當m=2,進行第二輪迭代
在權值分布為D2的情況下,閥值v取8.5時分類誤差率最低,故基本分類器G2(x)=sign(x-8.5)。

G2(x)在訓練數據集上的誤差率e2=0.07143+0.07143+0.07143+0.07143,第4,5,6個實例被錯誤分類。

計算G2(x)的系數:α2=0.6496。

更新訓練數據的權值分布:


分類器sign[f2(x)]在訓練數據集上有3個誤分類點,因此,繼續迭代。
當m=3,進行第三輪迭代
在權值分布為D3的情況下,閥值v取5.5時分類誤差率最低,故基本分類器G3(x)=-sign(x-5.5),注意,這里符號反向了。

G3(x)在訓練數據集上的誤差率e3=0.0455+0.0455+0.0455+0.0455=0.1820,第1,2,3,10個實例被誤分類。

計算G3(x)的系數:α2=0.7514。

更新訓練數據的權值分布:


分類器sign[f3(x)]在訓練數據集上的誤分類點個數為0,因此,終止迭代。
于是,最終分類器為


注意,G1(x),G2(x)和G3(x),是一個sign函數,從圖像看是一個方波圖,而最終分類器G(x)也是一個方波圖,由三個波形圖疊加合成。從信號的角度看,這是振幅疊加。G1(x),G2(x)和G3(x)都是弱分類器,分類正確率僅大于0.5,但線性組合而成的分類器G(x)正確率是100%,是一個強分類器。
AdaBoost算法的訓練誤差分析
AdaBoost最基本的性質是它能在學習過程中不斷減少訓練誤差,關于這個問題有下面的兩個定理:
**定理 1 (AdaBoost的訓練誤差界****) **AdaBoost算法的最終分類器的訓練誤差界為


(公式 8)
這里,G(x),f(x)和Zm分別由(公式 7)、(公式 6)和(公式 5)給出。
證明當G(xi) ≠yi時,I(G(xi) ≠yi)=1,yif(xi) < 0,因而exp(-yif(xi)) ≥1,所以

成立;
當G(xi) =yi時,I(G(xi) ≠yi)=0,又因為exp(-yif(xi)) ≥0,所以

成立;
可見,

恒成立。
所以

成立。
不等式的后半部分推導要用到Zm的定義式(公式 5)及(公式 4)的變形:

先推導如下:


定理**** 1的證明@特級飛行員舒克有很大貢獻)
這一定理說明,可以在每一輪選取最適當的Gm使得Zm最小,從而使訓練誤差下降最快。對二類分類問題,有如下結果:
定理 2 (二類分類問題AdaBoost的訓練誤差界)


(公式 9)
在這里,


證明由Zm的定義式(公式 5)得

因此等式


成立。
接下來要證明不等式

,兩邊平方,即

。(這個思路由@liyong3forever
貢獻,李航書中的那個泰勒展開式的思路并不好)
因為

,em∈[0,1],所以

,令

,問題變成了證明在閉區間[0,1]上不等式1-x≤e-x成立。這里,可以利用函數的單調性,導數等性質來證明,也可以用MATLAB畫出圖像來實際看看。
推論**** 1如果存在γ>0,對所有m有γm≥γ,則

(公式 10)
這表明在此條件下,AdaBoost的訓練誤差是以指數速率下降的。這一性質當然是很有吸引力的。
注意,AdaBoost算法不需要知道下界γ。這正是Freund與Schapire設計AdaBoost時所考慮的。與一些早期的提升方法不同,AdaBoost具有適應性,即它能適應弱分類器各自的訓練誤差率。這也是它的名稱的由來,Ada是Adaptive的簡寫。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容