1. 程式人生 > >Boosting(提升方法)和AdaBoost

Boosting(提升方法)和AdaBoost

發現 更新 這樣的 做的 stat element 操作 for 簡單

集成學習(ensemble learning)通過構建並結合多個個體學習器來完成學習任務,也被稱為基於委員會的學習。

集成學習構建多個個體學習器時分兩種情況:一種情況是所有的個體學習器都是同一種類型的學習算法,比如都是決策樹,或者都是神經網絡。這樣的集成是“同質”的,同質集成中的個體學習器稱為“基學習器”,相應的算法稱為“基學習算法”;另一種情況是集成學習中包含的個體學習器是不同類型的,比如同時包含了決策樹或者神經網絡算法,那麽這樣的集成是“異質”的,這時的個體學習器不能稱為“基學習器”。

那麽選擇什麽樣的個體學習器呢?一般來說,要獲得好的集成效果,個體學習器應該“好而不同”,即個體學習器的預測結果要有一定的準確性,同時各個體學習器之間要存在差異。

那麽根據個體學習器的生成方式,大致可以將集成學習分為兩大類:一類是個體學習器之間存在非常強的依賴關系,必須串行生成的序列化方法,代表就是Boosting(提升方法);第二類是個體學習器之間不存在強依賴關系,可同時生成的並行化方法,代表是Bagging和隨機森林(Random Forest)。

因此這篇文章要整理的提升方法和AdaBoost(Adaptive Boosting)就是屬於個體學習器是同一種類型的學習算法的情況,且基學習器之間存在強依賴關系,必須串行生成。

一、提升方法的總體思想

提升(boosting)方法是一種常用的統計學習方法,在分類問題中,它通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類的性能。它是基於這樣一種思想:在比較復雜的任務中進行決策時,把多個專家的判斷進行適當的綜合所得到的判斷,會比其中任何一個專家單獨的判斷更好。

提升的含義是,在學習中,如果已經發現了“弱學習算法”(弱學習算法是指學習到的分類器,其誤差率僅僅比隨機猜測要好一點的學習算法),那麽可以通過某種方式把它提升為“強學習算法”。因為有學者證明了,在概率近似正確(PAC)學習的框架中,一個概念是強可學習的充要條件是這個概念是弱可學習的。進一步地來說,在分類問題中,求比較粗糙的分類規則(弱分類器)要比求精確的分類規則(強分類器)要容易得多,那麽何不從弱學習分類算法出發,通過反復學習得到一系列弱分類器(或稱基本分類器),然後組合這些弱分類器,構成一個強分類器呢?

那麽如何得到一系列的弱分類器呢?大部分的提升方法都是每學習一個弱分類器,就改變訓練數據的概率分布(訓練數據的權值分布),然後針對不同的訓練數據分布,調用弱學習算法學習一系列弱分類器。

於是對於提升方法來說,要解決兩個問題:一是在每一輪訓練中如何調整樣本數據的權值或概率分布;二是如何將弱分類器組合成一個強分類器。不同的提升方法對這兩個問題有不同的處理辦法。

而提升方法中最具有代表性的AdaBoost算法是這樣做的:

對於第一個問題,提高那些被前一輪弱分類器錯誤分類的樣本的權值,而降低那些被正確分類的樣本的權值。那麽沒有得到正確分類的數據,由於其權值的加大而在下一輪的訓練中,受到下一個分類器更大的關註。

對於第二個問題,關於如何將一系列弱分類器組合為一個強分類器,AdaBoost采取加權多數表決的方法。具體的做法是加大分類誤差率小的弱分類器的權值,使其在表決中起到較大的作用;減小分類誤差率大的弱分類器的權值,使其在表決中起較小的作用。

以下是AdaBoost的概要圖。分類器在加權的數據集上進行訓練,接著結合起來產生最終的預測。

技術分享圖片

二、AdaBoost算法公式推導

已有訓練數據集T={(x1,y1),(x2,y2),...,(xN,yN)}, 其中xi屬於X屬於Rn,yi屬於y={-1, +1};選擇一種弱學習算法(比如決策樹),然後:

步驟1:初始化N個訓練樣本數據的權值分布,原始數據的權值分布是均勻的。

技術分享圖片

步驟2:AdaBoost反復學習基本分類器,在每一輪訓練(m=1, 2, ..., M)中順次地執行下列操作:

(1)使用具有權值分布Dm的訓練數據集學習,得到第m個基本分類器,預測值是1或-1:

技術分享圖片

(2)計算基本分類器Gm(x)在加權訓練數據集上的分類誤差率:

技術分享圖片

其中,wmi表示第m輪中第i個實例的權值,N個實例的權值之和為1。因此第m個基本分類器Gm(x)在加權訓練數據集上的分類誤差率,是被Gm(x)誤分類樣本的權值之和。

(3)由分類誤差率計算基本分類器Gm(x)的系數(以自然對數為底):

技術分享圖片

αm有兩個作用,一是用來調整下一輪訓練中訓練數據的權值,二是用來表示基本分類器Gm(x)在最終分類器中的重要性。em以0.5為界,em≥0.5時,αm≥0,並且αm與em是呈反方向變化的,因此第m個基本分類器的分類誤差率越小,在最終分類器中的作用越大。

(4)更新訓練數據的權值分布,為下一次訓練做準備:

技術分享圖片

Zm是規範化因子,所以Dm+1是一個概率分布,其各元素之和為1。

技術分享圖片

註意到yi與Gm(xi)的值取{1,-1},因此yi=Gm(xi),即樣本的真實類別與基本分類器的預測類別相同時,分類正確,yiGm(xi)=1,而不相等時,yiGm(xi)=-1。於是公式也可以寫成:

技術分享圖片

可以看到,這一輪被基本分類器Gm(x)分類錯誤的樣本,將被賦予更高的權值,相反被分類正確的樣本,權值得以縮小,而且,這兩類樣本之間的權值之比為e2αm

所以AdaBoost的特點是,不改變所給的訓練數據,而是改變訓練數據的權值分布,使得訓練數據在每一輪的基本分類器的學習中起到不同的作用。

步驟3:構建得到的M個基本分類器的線性組合,實現加權表決

技術分享圖片

並得到最終的分類器

技術分享圖片

這裏所有的αm之和並不為1,sign(•)是指示函數,f(x)的符號決定了樣本x的類別,f(x)為正時,G(x)等於1,f(x)為負時,G(x)等於-1。

以上就是AdaBoost的一般步驟,看完後,會發現這三個步驟中有些地方是有跳躍的,一是這個基本分類器選擇哪種模型(決策樹、SVM還是樸素貝葉斯),二是使用權值分布Dm的訓練數據集,如何進行學習來得到第m個基本分類器,甚至也沒有提到損失函數。這需要更具體的算法,比如提升樹來說明。當然下面會證明AdaBoost的損失函數其實是指數損失函數。

三、AdaBoost算法的另一種解釋:加法模型和前向分步算法

1、加法模型和前向分步算法

(1)加法模型的定義:

加法模型的形式為

技術分享圖片

其中,b(x; γm)是基函數,γm是基函數的參數,βm是基函數的系數。

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

技術分享圖片

(2)加法模型的求解:前向分步算法

同時求解加法模型中的γ和β這兩個參數(一共有2M個待求參數)是一件復雜的事情,可以用前向分步算法(forward stagewise algorithm)來進行求解。

前向分步算法求解這一優化問題的思路是:因為求解的加法模型是M個基函數的組合,如果能夠從前到後,每次只學習一個基函數和系數(參數),逐步逼近優化目標函數式,那麽就可以將復雜的問題簡單化。

前向分步算法求解加法模型的具體步驟為:

步驟一:確定訓練數據集為T={(x1,y1),(x2,y2),...,(xN,yN)},損失函數為L(y, f(x)),基函數集為{b(x; γ)},初始化f0(x)=0。

步驟二:對m=1, 2, ..., M,逐個求解γm、βm和基函數fm(x)。

①極小化損失函數,得到參數γm和βm

技術分享圖片

②更新基函數

技術分享圖片

步驟三:得到M個基函數和參數γm、βm,組合成加法模型:

技術分享圖片

2、AdaBoost的前向分步算法

對於AdaBoost有另外一種解釋,即可以認為AdaBoost是前向分步加法算法的特例,是模型為加法模型、損失函數是指數函數、學習算法是前向分步算法的二類分類學習方法。

接下來證明AdaBoost是前向分步加法算法的特例,參考的是《統計學習方法》,並將其中有跳躍的部分證明進行了細化:

技術分享圖片

參考資料:

1、李航:《統計學習方法》

2、周誌華:《機器學習》

3、《The Elements of Statistical Learning》(ESL)

Boosting(提升方法)和AdaBoost