Boosting算法簡介

1、Boosting算法的發展歷史

  Boosting算法是一種把若干個分類器整合爲一個分類器的方法,在boosting算法產生以前,還出現過兩種比較重要的將多個分類器整合爲一個分類器的方法,即boostrapping方法和bagging方法。咱們先簡要介紹一下bootstrapping方法和bagging方法。git

  1)bootstrapping方法的主要過程算法

  主要步驟:bootstrap

  i)重複地從一個樣本集合D中採樣n個樣本api

  ii)針對每次採樣的子樣本集,進行統計學習,得到假設Hiapp

  iii)將若干個假設進行組合,造成最終的假設Hfinal框架

  iv)將最終的假設用於具體的分類任務ide

  2)bagging方法的主要過程性能

  主要思路:學習

  i)訓練分類器測試

  從總體樣本集合中,抽樣n* < N個樣本 針對抽樣的集合訓練分類器Ci

  ii)分類器進行投票,最終的結果是分類器投票的優勝結果

  可是,上述這兩種方法,都只是將分類器進行簡單的組合,實際上,並無發揮出分類器組合的威力來。直到1989年,Yoav Freund與 Robert Schapire提出了一種可行的將弱分類器組合爲強分類器的方法。並由此而得到了2003年的哥德爾獎(Godel price)。

  Schapire還提出了一種早期的boosting算法,其主要過程以下:

  i)從樣本總體集合D中,不放回的隨機抽樣n1 < n 個樣本,獲得集合 D1

  訓練弱分類器C1

  ii)從樣本總體集合D中,抽取 n2 < n 個樣本,其中合併進一半被 C1 分類錯誤的樣本。獲得樣本集合 D2

  訓練弱分類器C2

  iii)抽取D樣本集合中,C1C2 分類不一致樣本,組成D3

  訓練弱分類器C3

  iv)用三個分類器作投票,獲得最後分類結果

  到了1995年,Freund and schapire提出瞭如今的adaboost算法,其主要框架能夠描述爲:

  i)循環迭代屢次

  更新樣本分佈

  尋找當前分佈下的最優弱分類器

  計算弱分類器偏差率

  ii)聚合屢次訓練的弱分類器

  在下圖中能夠看到完整的adaboost算法:

圖1.1  adaboost算法過程

  如今,boost算法有了很大的發展,出現了不少的其餘boost算法,例如:logitboost算法,gentleboost算法等等。在此次報告中,咱們將着重介紹adaboost算法的過程和特性。

2、Adaboost算法及分析

  從圖1.1中,咱們能夠看到adaboost的一個詳細的算法過程。Adaboost是一種比較有特色的算法,能夠總結以下:

  1)每次迭代改變的是樣本的分佈,而不是重複採樣(re weight)

  2)樣本分佈的改變取決於樣本是否被正確分類

  老是分類正確的樣本權值低

  老是分類錯誤的樣本權值高(一般是邊界附近的樣本)

  3)最終的結果是弱分類器的加權組合

  權值表示該弱分類器的性能

  簡單來講,Adaboost有不少優勢:

  1)adaboost是一種有很高精度的分類器

  2)可使用各類方法構建子分類器,adaboost算法提供的是框架

  3)當使用簡單分類器時,計算出的結果是能夠理解的。並且弱分類器構造極其簡單

  4)簡單,不用作特徵篩選

  5)不用擔憂overfitting!

  總之:adaboost是簡單,有效。

  下面咱們舉一個簡單的例子來看看adaboost的實現過程:

 

  圖中,「+」和「-」分別表示兩種類別,在這個過程當中,咱們使用水平或者垂直的直線做爲分類器,來進行分類。

  第一步:

 

  根據分類的正確率,獲得一個新的樣本分佈D,一個子分類器h1

  其中劃圈的樣本表示被分錯的。在右邊的途中,比較大的「+」表示對該樣本作了加權。

  第二步:

 

  根據分類的正確率,獲得一個新的樣本分佈D3,一個子分類器h2

  第三步:

 

  獲得一個子分類器h3

  整合全部子分類器:

 

  所以能夠獲得整合的結果,從結果中看,及時簡單的分類器,組合起來也能得到很好的分類效果,在例子中全部的。

  Adaboost算法的某些特性是很是好的,在咱們的報告中,主要介紹adaboost的兩個特性。一是訓練的錯誤率上界,隨着迭代次數的增長,會逐漸降低;二是adaboost算法即便訓練次數不少,也不會出現過擬合的問題。

  下面主要經過證實過程和圖表來描述這兩個特性:

  1)錯誤率上界降低的特性

 

 

 

 

  從而能夠看出,隨着迭代次數的增長,實際上錯誤率上界在降低。

  2)不會出現過擬合現象

  一般,過擬合現象指的是下圖描述的這種現象,即隨着模型訓練偏差的降低,實際上,模型的泛化偏差(測試偏差)在上升。橫軸表示迭代的次數,縱軸表示訓練偏差的值。

 

而實際上,並無觀察到adaboost算法出現這樣的狀況,即當訓練偏差小到必定程度之後,繼續訓練,返回偏差仍然不會增長。

  對這種現象的解釋,要藉助margin的概念,其中margin表示以下:

  經過引入margin的概念,咱們能夠觀察到下圖所出現的現象:

 

 

  從圖上左邊的子圖能夠看到,隨着訓練次數的增長,test的偏差率並無升高,同時對應着右邊的子圖能夠看到,隨着訓練次數的增長,margin一直在增長。這就是說,在訓練偏差降低到必定程度之後,更多的訓練,會增長分類器的分類margin,這個過程也可以防止測試偏差的上升。

3、多分類adaboost

  在平常任務中,咱們一般須要去解決多分類的問題。而前面的介紹中,adaboost算法只能適用於二分類的狀況。所以,在這一小節中,咱們着重介紹如何將adaboost算法調整到適合處理多分類任務的方法。

  目前有三種比較經常使用的將二分類adaboost方法。

  一、adaboost M1方法

  主要思路: adaboost組合的若干個弱分類器自己就是多分類的分類器。

  在訓練的時候,樣本權重空間的計算方法,仍然爲:

 

  在解碼的時候,選擇一個最有可能的分類

 

  二、adaboost MH方法

  主要思路: 組合的弱分類器仍然是二分類的分類器,將分類label和分類樣例組合,生成N個樣本,在這個新的樣本空間上訓練分類器。

  能夠用下圖來表示其原理:

 

 

  三、對多分類輸出進行二進制編碼

  主要思路:對N個label進行二進制編碼,例如用m位二進制數表示一個label。而後訓練m個二分類分類器,在解碼時生成m位的二進制數。從而對應到一個label上。

4、總結

  最後,咱們能夠總結下adaboost算法的一些實際可使用的場景:

  1)用於二分類或多分類的應用場景

  2)用於作分類任務的baseline

  無腦化,簡單,不會overfitting,不用調分類器

  3)用於特徵選擇(feature selection)

  4)Boosting框架用於對badcase的修正

  只須要增長新的分類器,不須要變更原有分類器

  因爲adaboost算法是一種實現簡單,應用也很簡單的算法。Adaboost算法經過組合弱分類器而獲得強分類器,同時具備分類錯誤率上界隨着訓練增長而穩定降低,不會過擬合等的性質,應該說是一種很適合於在各類分類場景下應用的算法。

by sep yangfan

 

相關文章
相關標籤/搜索