本文結構:
- 什么是集成學習?
- 為什么集成的效果就會好於單個學習器?
- 如何生成個體學習器?
- 什么是 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_t 和 D_t-1 之間的關系
這樣就推導出了 Adaboost 算法。
參考:
《機器學習》
https://zh.wikipedia.org/wiki/AdaBoost
http://blog.csdn.net/iemyxie/article/details/40423907
