模型融合---Adaboost總結

1、簡介

  Boosting 是一類算法的總稱,這類算法的特色是經過訓練若干弱分類器,而後將弱分類器組合成強分類器進行分類。爲何要這樣作呢?由於弱分類器訓練起來很容易,將弱分類器集成起來,每每能夠獲得很好的效果。俗話說,"三個臭皮匠,頂個諸葛亮",就是這個道理。這類 boosting 算法的特色是各個弱分類器之間是串行訓練的,當前弱分類器的訓練依賴於上一輪弱分類器的訓練結果。各個弱分類器的權重是不一樣的,效果好的弱分類器的權重大,效果差的弱分類器的權重小。值得注意的是,AdaBoost 不止適用於分類模型,也能夠用來訓練迴歸模型。這須要將弱分類器替換成迴歸模型,並改動損失函數。html

進入正題以前,先來看Adaboost的兩個 核心問題
  1. 在每一輪學習以前,如何改變訓練數據的權值分佈?
  2. 如何將一組弱分類器組合成一個強分類器?

針對第一個問題,Adaboost算法的作法是:node

提升那些被前一輪弱分類器錯誤分類樣本的權值,而下降那些被正確分類樣本的權值。如此,那些沒有獲得正確分類的樣本,因爲其權值加大而受到後一輪的弱分類器的更大關注。ios

第二個問題,弱分類器的組合,AdaBoost採起加權多數表決的方法。具體地:算法

加大 分類偏差率小 的弱分類器的權值,使其在表決中起較大的做用;減少分類偏差率大的弱分類器的權值,使其在表決中起較小的做用。bootstrap

AdaBoost算法的巧妙之處就在於它將這些學習思路天然而且有效地在一個算法裏面實現。網絡

 

幾個誤區:app

  • Adaboost算法基本原理就是將多個弱分類器(弱分類器通常選用單層決策樹)進行合理的結合,使其成爲一個強分類器。
  •  弱學習器:在二分狀況下弱分類器的錯誤率會低於50%。其實任意的分類器均可以作爲弱分類器,好比以前介紹的KNN、決策樹、Naive Bayes、logiostic迴歸和SVM均可以。

1. Adaboost 的算法的流程?

重點關注如下4個問題框架

  • 如何計算學習偏差率e?
  • 如何獲得弱學習器權重係數α?
  • 如何更新樣本權重D?
  • 使用何種結合策略

  本節主要介紹Adaptive Boosting。首先經過講一個老師教小學生識別蘋果的例子,來引入Boosting的思想,即把許多「弱弱」的hypotheses合併起來,變成很強的預測模型。而後重點介紹這種算法如何實現,關鍵在於每次迭代時,給予樣本不一樣的係數u,宗旨是放大錯誤樣本,縮小正確樣本,獲得不一樣的小矩g。而且在每次迭代時根據錯誤ϵ值的大小,給予不一樣gt不一樣的權重。最終由不一樣的gt進行組合獲得總體的預測模型G。實際證實,Adaptive Boosting可以獲得有效的預測模型。函數

(1)引入

  咱們先來看一個簡單的識別蘋果的例子,老師展現20張圖片,讓6歲孩子們經過觀察,判斷其中哪些圖片的內容是蘋果。從判斷的過程當中推導如何解決二元分類問題的方法。post

  顯然這是一個監督式學習,20張圖片包括它的標籤都是已知的。首先,學生Michael回答說:全部的蘋果應該是圓形的。根據Michael的判斷,對應到20張圖片中去,大部分蘋果能被識別出來,但也有錯誤。其中錯誤包括有的蘋果不是圓形,並且圓形的水果也不必定是蘋果。以下圖所示:

  上圖中藍色區域的圖片表明分類錯誤。顯然,只用「蘋果是圓形的」這一個條件不能保證分類效果很好。咱們把藍色區域(分類錯誤的圖片)放大,分類正確的圖片縮小,這樣在接下來的分類中就會更加註重這些錯誤樣本。

  而後,學生Tina觀察被放大的錯誤樣本和上一輪被縮小的正確樣本,回答說:蘋果應該是紅色的。根據Tina的判斷,獲得的結果以下圖所示:

  上圖中藍色區域的圖片同樣表明分類錯誤,即根據這個蘋果是紅色的條件,使得青蘋果和草莓、西紅柿都出現了判斷錯誤。那麼結果就是把這些分類錯誤的樣本放大化,其它正確的樣本縮小化。一樣,這樣在接下來的分類中就會更加註重這些錯誤樣本。

  接着,學生Joey通過觀察又說:蘋果也多是綠色的。根據Joey的判斷,獲得的結果以下圖所示:

  上圖中藍色區域的圖片同樣表明分類錯誤,根據蘋果是綠色的條件,使得圖中藍色區域都出現了判斷錯誤。一樣把這些分類錯誤的樣本放大化,其它正確的樣本縮小化,在下一輪判斷繼續對其修正。

  後來,學生Jessica又發現:上面有梗的纔是蘋果。獲得以下結果:

  通過這幾個同窗的推論,蘋果被定義爲:圓的,紅色的,也多是綠色的,上面有梗。從一個一個的推導過程當中,咱們彷佛獲得一個較爲準確的蘋果的定義。雖然可能不是很是準確,可是要比單一的條件要好得多。也就是說把全部學生對蘋果的定義融合起來,最終獲得一個比較好的對蘋果的整體定義。這種作法就是咱們本節課將要討論的演算法。這些學生表明的就是簡單的hypotheses gt,將全部gt融合,獲得很好的預測模型G。例如,二維平面上簡單的hypotheses (水平線和垂直線),這些簡單gt最終組成的較複雜的分類線可以較好地將正負樣本徹底分開,即獲得了好的預測模型。

  

  因此,上個蘋果的例子中,不一樣的 學生表明不一樣的 hypotheses gt​;最終獲得的蘋果整體定義就表明hypothesis G;而 老師就表明 演算法A,指導學生的注意力集中到關鍵的例子中(錯誤樣本),從而獲得更好的蘋果定義。

(2)Diversity by Re-weighting

  Bagging的核心是bootstrapping,經過對原始數據集D不斷進行bootstrap的抽樣動做,獲得與D相似的數據集D ^ t ,每組D ^ t 都能獲得相應的gt,從而進行aggregation的操做。如今,假如包含四個樣本的D通過bootstrap,獲得新的D ^ t , 以下:

  參數u至關因而權重因子,當D ^t 中第i個樣本出現的次數越多的時候,那麼對應的ui越大,表示在error function中對該樣本的懲罰越多。因此,從另一個角度來看bagging,它其實就是經過bootstrap的方式,來獲得這些ui 值,做爲犯錯樣本的權重因子,再用base algorithn最小化包含ui 的error function,獲得不一樣的gt。這個error function被稱爲bootstrap weighted error。
  這種算法叫作 Weightd Base Algorithm目的就是最小化bootstrap-weighted error
   其實,這種weightd base algorithm咱們以前就見過相似的算法形式。例如在soft-margin SVM中,咱們引入容許犯錯的項,一樣能夠將每一個點的error乘以權重因子un 。加上該項前的參數C,通過QP,最終獲得0≤α n≤C un,有別於以前介紹的0≤α≤C。這裏的un 至關於每一個犯錯的樣本的懲罰因子,並會反映到αn 的範圍限定上。
  一樣在logistic regression中,一樣能夠對每一個犯錯誤的樣本乘以相應的un ,做爲懲罰因子。un表示該錯誤點出現的次數,un越大,則對應的懲罰因子越大,則在最小化error時就應該更加劇視這些點。

  知道了u的概念後,咱們知道不一樣的u組合通過base algorithm獲得不一樣的gt 。那麼如何選取u,使獲得的gt之間有很大的不一樣呢?之因此要讓全部的gt差異很大,是由於上節課aggregation中,咱們介紹過 gt越不同,其aggregation的效果越好,即每一個人的意見越不相同,越能運用集體的智慧,獲得好的預測模型。
  爲了獲得不一樣的g t,咱們先來看看g t和g t+1是怎麼獲得的:

  乍看上面這個式子,彷佛很差求解。可是,咱們對它作一些等價處理,其中分式中分子能夠當作gt做用下犯錯誤的點,而分母能夠當作犯錯的點和沒有犯錯誤的點的集合,即全部樣本點。其中犯錯誤的點和沒有犯錯誤的點分別用橘色方塊和綠色圓圈表示:

(3)Adaptive Boosting Algorithm

  接下來的內容,咱們將對上面的第二個問題進行探討,研究一種算法,將全部的g(t)進行linear組合。方法是計算g(t)的同時,就能計算獲得其線性組合係數α t ,即 aggregate linearly on the fly。這種算法使最終求得g t+1 的時候,全部gt的線性組合係數α也求得了,不用再從新計算α了。這種Linear Aggregation on the Fly算法流程爲:

  綜上所述,完整的adaptive boosting(AdaBoost)Algorithm流程以下:

  從咱們以前介紹過的VC bound角度來看,AdaBoost算法理論上知足:

 (4)舉例:

【例1】

  上一小節咱們已經介紹了選擇一個「弱弱」的算法A(ϵt​≤ϵ<21​, 比亂猜好就行),就能通過屢次迭代獲得E in​=0。咱們稱這種形式爲 decision stump模型。下面介紹一個例子,來看看AdaBoost是如何使用decision stump解決實際問題的。以下圖所示,二維平面上分佈一些正負樣本點,利用decision stump來作切割。

初始:

迭代五次:

 能夠看到,通過5次迭代以後,全部的正負點已經被徹底分開了,則最終獲得的分類線爲:
【例2】
  另一個例子,對於一個相對比較複雜的數據集,以下圖所示。它的分界線從視覺上看應該是一個sin波的形式。若是咱們再使用AdaBoost算法,經過decision stump來作切割。在迭代切割100次後,獲得的分界線以下所示。

   能夠看出,AdaBoost-Stump這種非線性模型獲得的分界線對正負樣本有較好的分離效果。課程中還介紹了一個AdaBoost-Stump在人臉識別方面的應用:

 

【例3】

 

2.Adaboost 如何用於分類?

 

3.Adaboost 如何用於迴歸?

【拓展】爲何每一個樣本最終的結果取分類器獲得全部值排序以後的中位數做爲最終的結果?

答:由於中位數的值可以使得偏差最小,具體證實見下圖

 

4.Adaboost 的參數有哪些,如何調參 ?

 (1)框架參數

base_estimator:A理論上能夠選擇任何一個分類或者回歸學習器,不過須要支持樣本權重。咱們經常使用的通常是CART決策樹或者神經網絡MLP。默認是決策樹.另外有一個要注意的點是,若是咱們選擇的AdaBoostClassifier算法是SAMME.R,則咱們的弱分類學習器還須要支持機率預測,也就是在scikit-learn中弱分類學習器對應的預測方法除了predict還須要有predict_proba。

algorithm:這個參數只有AdaBoostClassifier有。主要緣由是scikit-learn實現了兩種Adaboost分類算法,SAMME和SAMME.R。二者的主要區別是弱學習器權重的度量,SAMME使用了和咱們的原理篇裏二元分類Adaboost算法的擴展,即用對樣本集分類效果做爲弱學習器權重,而SAMME.R使用了對樣本集分類的預測機率大小來做爲弱學習器權重。因爲SAMME.R使用了機率度量的連續值,迭代通常比SAMME快,所以AdaBoostClassifier的默認算法algorithm的值也是SAMME.R。咱們通常使用默認的SAMME.R就夠了,可是要注意的是使用了SAMME.R, 則弱分類學習器參數base_estimator必須限制使用支持機率預測的分類器。SAMME算法則沒有這個限制。 

loss:這個參數只有AdaBoostRegressor有,Adaboost.R2算法須要用到。有線性‘linear’, 平方‘square’和指數 ‘exponential’三種選擇, 默認是線性,通常使用線性就足夠了,除非你懷疑這個參數致使擬合程度很差。

n_estimators:過小容易欠擬合,太大容易過擬合,默認50

learning_rate:fk(x)=fk−1(x)+ναkGk(x),v就是學習率,較小的v意味着須要更多的弱學習器的迭代次數。一般咱們用步長和迭代次數一塊兒來決定算法的擬合效果,能夠從一個小一點的v開始調參,默認是1.

(2)弱學習器參數

max_features:劃分時考慮的最大特徵數。默認是「None」,可使用不少種類型的值,默認是"None",意味着劃分時考慮全部的特徵數;若是是"log2"意味着劃分時最多考慮log2N個特徵;若是是"sqrt"或者"auto"意味着劃分時最多考慮N−−√個特徵。若是是整數,表明考慮的特徵絕對數。若是是浮點數,表明考慮特徵百分比,即考慮(百分比xN)取整後的特徵數。其中N爲樣本總特徵數。通常來講,若是樣本特徵數很少,好比小於50,咱們用默認的"None"就能夠了,若是特徵數很是多,咱們能夠靈活使用剛纔描述的其餘取值來控制劃分時考慮的最大特徵數,以控制決策樹的生成時間。

max_depth:默承認以不輸入,若是不輸入的話,決策樹在創建子樹的時候不會限制子樹的深度。通常來講,數據少或者特徵少的時候能夠無論這個值。若是模型樣本量多,特徵也多的狀況下,推薦限制這個最大深度,具體的取值取決於數據的分佈。經常使用的能夠取值10-100之間。

min_samples_split:內部節點再劃分所需最小樣本數。這個值限制了子樹繼續劃分的條件,若是某節點的樣本數少於min_samples_split,則不會繼續再嘗試選擇最優特徵來進行劃分。 默認是2.若是樣本量不大,不須要管這個值。若是樣本量數量級很是大,則推薦增大這個值。

min_samples_leaf:葉子節點最少樣本數。 這個值限制了葉子節點最少的樣本數,若是某葉子節點數目小於樣本數,則會和兄弟節點一塊兒被剪枝。 默認是1,能夠輸入最少的樣本數的整數,或者最少樣本數佔樣本總數的百分比。若是樣本量不大,不須要管這個值。若是樣本量數量級很是大,則推薦增大這個值。

min_weight_fraction_leaf:葉子節點最小的樣本權重和。這個值限制了葉子節點全部樣本權重和的最小值,若是小於這個值,則會和兄弟節點一塊兒被剪枝。 默認是0,就是不考慮權重問題。通常來講,若是咱們有較多樣本有缺失值,或者分類樹樣本的分佈類別誤差很大,就會引入樣本權重,這時咱們就要注意這個值了。

max_leaf_nodes:經過限制最大葉子節點數,能夠防止過擬合,默認是"None」,即不限制最大的葉子節點數。若是加了限制,算法會創建在最大葉子節點數內最優的決策樹。若是特徵很少,能夠不考慮這個值,可是若是特徵分紅多的話,能夠加以限制,具體的值能夠經過交叉驗證獲得。

5.Adaboost 的優缺點 ?

優勢:
  • Adaboost做爲分類器時,分類精度很高
  • 在Adaboost的框架下,可使用各類迴歸分類模型來構建弱學習器,很是靈活。
  • 做爲簡單的二元分類器時,構造簡單,結果可理解。
  • 不容易發生過擬合
缺點:
  •   在Adaboost訓練過程當中,Adaboost會使得難於分類樣本的權值呈指數增加,訓練將會過於偏向這類困難的樣本,致使Adaboost算法易受噪聲干擾。此外,Adaboost依賴於弱分類器,而弱分類器的訓練時間每每很長。

 

 

參考文獻:

【1】手把手教你實現一個 AdaBoost

【2】AdaBoost原理詳解

【3】第06章:深刻淺出ML之Boosting家族

【4】集成學習之Adaboost算法原理小結

相關文章
相關標籤/搜索