【機器學習筆記之四】Adaboost 算法


本文結構:

  • 什么是集成學習?
  • 為什么集成的效果就會好於單個學習器?
  • 如何生成個體學習器?
  • 什么是 Boosting?
  • Adaboost 算法?

什么是集成學習

集成學習就是將多個弱的學習器結合起來組成一個強的學習器。

這就涉及到,先產生一組‘個體學習器’,再用一個策略將它們結合起來。

個體學習器可以選擇:決策樹,神經網絡。
集成時可以所有個體學習器屬於同一類算法:全是決策樹,或全是神經網絡;也可以來自不同的算法。
結合策略:例如分類問題,可以用投票法,少數服從多數。

之所以用這種集成的思想,是因為單獨用一個算法時,效果往往不容易達到很好,但如果多個個體算法結合在一起,取長補短,整體效果就會比單獨一個要強。


什么時候集成的效果就會好於單個學習器

當然集成並不是不管怎么選擇學習器,怎么組合都一定會獲得更好的效果,最好的情況是,每個學習器都不是特別差,並且要具有一定的多樣性,否則可能集成后的會沒有效果,或者起負作用:


來證明一下:

假設個體學習器的錯誤率為 ε,


假設錯誤率相互獨立,由 Hoeffding 不等式可得到整體學習器的錯誤率為:


由不等式的右邊可知,如果將學習器的數目 T 逐漸增大,那么整個學習器的錯誤率將指數級下降,甚至最終趨向於零。


這里提到了‘錯誤率相互獨立’的假設,這就是集成學習的一個核心問題:
如何生成准確性又不是很差,並且還能保證多樣性的個體學習器呢

目前主要有兩種生成方式:

Boosting:個體學習器間存在強依賴關系,必須串行生成。
Bagging,隨機森林:個體之間不存在強依賴關系,可並行生成。


Boosting 思想:
給定初始訓練數據,由此訓練出第一個基學習器;
根據基學習器的表現對樣本進行調整,在之前學習器做錯的樣本上投入更多關注;
用調整后的樣本,訓練下一個基學習器;
重復上述過程 T 次,將 T 個學習器加權結合。

根據 Boosting 的定義,它有三個基本要素:
基學習器
組合方式
目標函數


Boosting 的代表是 Adaboost:
AdaBoost方法相對於大多數其它學習算法而言,不會很容易出現過擬合現象。

Adaboost 算法


  • 第 1 行,初始化樣本權重分布,此時每個數據的權重是一樣的,所以是 1/m;
    以分類問題為例,最初令每個樣本的權重都相等,對於第 t 次迭代操作,我們就根據這些權重來選取樣本點,進而訓練分類器 C_t

  • 第 2 行,進入 for 循環 T 次,即基學習器的個數為 T 個;

  • 第 3 行,根據具有當前權重分布 D_t 的數據集,學習出 h_t
    前一個分類器分錯的樣本會被用來訓練下一個分類器。
    h_t 是分量分類器 C_t 給出的對任一樣本點 xi 的標記(+1或-1),h_t(xi) = yi 時,樣本被正確分類。

  • 第 4 行,計算當前學習器的誤差;

  • 第 5 行,如果誤差大於 0.5,就停止;
    AdaBoost 方法中使用的分類器可能很弱(比如出現很大錯誤率),但只要它的分類效果比隨機好一點(比如兩類問題分類錯誤率略小於0.5),就能夠改善最終得到的模型。

  • 第 6 行,計算當前學習器的權重 α_t
    權值是關於誤差的表達式,當下一次分類器再次錯分這些點之后,會提高整體的錯誤率,這樣就導致分類器權值變小,進而導致這個分類器在最終的混合分類器中的權值變小,也就是說,Adaboost算法讓正確率高的分類器占整體的權值更高,讓正確率低的分類器權值更低,從而提高最終分類器的正確率。

  • 第 7 行,得到下一時刻的權重分布 D_t+1.
    如果某個樣本點已經被准確地分類,那么在構造下一個訓練集中,它被選中的概率就被降低;相反,如果某個樣本點沒有被准確地分類,那么它的權重就得到提高。通過這樣的方式,AdaBoost 方法能“聚焦於”那些較難分(更富信息)的樣本上。

最后的總體分類的判決可以使用各個分量分類器加權平均來得到,
再取符號,這樣,最后對分類結果的判定規則是:



舉個例子

圖中“+”和“-”表示兩種類別,
共10個樣本,故每個樣本權值為0.1,


第一次划分有3個點划分錯誤,根據誤差表達式得到誤差:e1=(0.1+0.1+0.1)/1.0=0.3


分類器權重:


根據算法,對於正確分類的7個點,權值不變,仍為0.1, 對於錯分的3個點,權值為:
D1=D0*(1-e1)/e1=0.1*(1-0.3)/0.3=0.2333


第二次分類,有3個 "-" 分類錯誤,按照算法計算如下:
上輪分類后權值之和為:0.17+0.23333=1.3990
分類誤差:e2=0.1*3/1.3990=0.2144
分類器權重 a2=0.6493
錯分的3個點權值為:D2=0.1*(1-0.2144)/0.2144=0.3664

第三次:


最后將三次的分類器結合起來,得到上面的分類結果:



接下來看 α_t , D_t 是怎么推導出來的

我們最后學習出來的預測數據的模型為 H:


即強學習器是基學習器的線性組合形式。

目標函數用指數損失函數:


為什么目標函數用指數損失函數?

當我們用指數損失函數時,

我們需要求得 H 使得損失函數達到極小,那么就想到求偏導,


並使其為 0,得到 H 的形式:


那么最終的判定規則為:


說明若指數損失達到最小,則分類錯誤率也將最小化,也就是說指數損失可以作為分類任務 0 1 損失的替代函數,因為它連續可微,就用它來替代 0 1 損失函數作為優化目標。

第一個基學習器由初始數據得到,之后的 α_t , h_t 都是迭代產生。

第 6 行: α_t

想要求得 α_t 使得 α_t*h_t 最小化指數損失函數:


那就需要對 α_t 求導:


使導數為 0 后得到 α_t 的解為:


第 4,5 行: h_t 的條件

學習到 H_t-1 后,希望下一個 h_t 可以糾正 H_t-1 的全部錯誤,即使下面的目標函數達到最小:


經過一系列推導后,可得到理想的基學習器為:


即理想的 h_t 將在分布 D_t 下最小化分類誤差,也就是在用 D_t 訓練 h_t 時,分類誤差應小於 0.5。

第 7 行:再推導一下 D_tD_t-1 之間的關系


這樣就推導出了 Adaboost 算法。

參考:
《機器學習》
https://zh.wikipedia.org/wiki/AdaBoost
http://blog.csdn.net/iemyxie/article/details/40423907


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM