集成學習,又稱爲「多分類器系統」(multi-classifier system)、「基於委員會的學習」(committee-based learning)等。基本的想法是結合多個學習器,得到比單一學習器泛化性能更好的學習器。html
根據個體學習器的生成方式,目前集成學習大體可分爲兩大類:算法
考慮二分類問題y∈{-1, +1},真實函數f,並假定基分類器錯誤率爲ε。假設集成經過簡單投票結合T個基分類器,i.e.若超過半數的基分類器正確,則集成分類器正確:bootstrap
接下來估算集成的錯誤率。首先,有下式網絡
設基分類器正確率爲p,由Hoeffding不等式,當n=(p - )T時,成立下述不等式dom
由n = T/2, p = 1-ε 得=1/2 - ε, 因而函數
上式估算出了集成學習錯誤率的上界,且從中能夠看出,隨着集成中個體分類器數目T的增大,集成的錯誤率將指數級降低,最終趨於零。性能
值得注意的是,以上分析基於的假設是基學習器相互獨立。然而,在現實問題中,個體學習器爲解決同一問題而訓練,並不相互獨立。所以上述分析只是理論層面,實際問題的解決,還須要深刻了解前文提到的序列化與並行化方法。學習
Boosting是一族可將弱學習器提高爲強學習器的算法,工做機制相似:先由初始訓練集訓練出基學習器,再根據其表現調整樣本分佈,賦予未被準確分類的樣本更高的權重,而後根據調整後的樣本分佈再訓練接下來的基分類器;重複進行,直至所有T個基學習器訓練完成,再對T個基學習器加權結合。spa
Boosting族算法中以AdaBoost(Adapative Boosting)最爲著名。設yi∈{-1, +1}, f是真實函數,AdaBoost的描述以下:3d
輸入:訓練集D = {(x1, y1), (x2, y2), ..., (xm, ym)}; 基學習算法
; 訓練輪數T.
過程:
1: D1 = 1/m. //初始化訓練數據的權值分佈,每一個訓練樣本被賦予相同的權重
2: for t = 1 to T do
3: ht =
(D, Dt); //基於分佈Dt從數據集D中訓練出分類器ht
4: εt = Px~Dt(ht(x) ≠ f(x));
5: if εt > 0.5 then break //檢查基學習器是否比隨機猜想好;不知足則學習器被拋棄,學習終止。重採樣(re-sampling)後從新訓練。
6: αt = (1/2) * ln((1 - εt) / εt); //肯定分類器ht的權重,被誤分的樣本的權值會增大,被正確分類的權值減少,推導過程見p.175
7: Dt+1(x) =
![]()
= (Dt(x) * exp(-αt * f(x) * ht(x))) / Zt; //」重賦權法「(re-weighting)更新樣本分佈,其中Zt是規範化因子,推倒見p.176
8: end for
輸出: H(x) = sign(∑Tt=1αtht(x)) //輸出最終的強分類器
在該算法過程當中,用的是「加性模型」(additive model)推導,即根據基學習器的線性組合來最小化指數損失函數(exponential loss function)
sign(H(x))能夠達到貝葉斯最優錯誤率。這是由於,由損失函數對H(x)的偏導
爲零能夠解得
因而
即,若H(x)可讓損失函數最小化,則分類錯誤率也將最小化。
Bagging(Bootstrap AGGregatING)是並行集成學習最著名的表明。它直接基於自主採樣法(bootstrap sampling): 採樣出T個含m個訓練樣本的採樣集,而後基於每一個採樣集訓練出一個基學習器,再將這些基學習器結合。對預測輸出進行結合時,對分類任務採起簡單投票法,對迴歸任務使用簡單平均法。
Bagging的算法描述以下:
輸入:訓練集D = {(x1, y1), (x2, y2), ..., (xm, ym)}; 基學習算法
; 訓練輪數T.
過程:
1. for t = 1 to T do
2. ht =
(D, Dbs);
3. end for
輸出:H(x) =
算法的複雜度爲T(O(m) + O(s)),其中O(m)爲基學習器的計算複雜度,O(s)爲採樣與投票/平均過程的計算複雜度。因爲O(s)與T很小,所以算法複雜度可看做O(m)。可見Bagging是比較高效的。此外,與AdaBoost只適用於二分類任務不一樣,Bagging能夠直接用於多分類、迴歸等任務。
此外,因爲每一個基學習器只用了初始訓練集中約63.2%的樣本,剩下的樣本可用做驗證集來對泛化能力進行「包外估計」(out-of-bag estimate)。
Bagging關注下降方差,在不剪枝決策樹、神經網絡等易受樣本擾動的學習器上效果更佳明顯。
隨機森林(Random Forest, RF)在以決策樹爲基學習器構建Bagging集成的基礎上,進一步在決策樹的訓練過程當中引入隨機屬性選擇。
學習器結合可能的優勢:
接下來總結幾種常見的結合策略。
對數值型輸出,經常使用平均法(averaging):
其中,加權平均法的權重通常從訓練數據中學習獲得。但因爲噪聲干擾和過擬合問題,加權平均法也未必優於簡單平均法。通常而言,個體學習器性能相差較大時,宜用加權平均法,不然宜用簡單平均法。
對分類任務,最多見的是用投票法(voting)。將hi在樣本x上的預測輸出表示爲一個N維向量(h1i(x), h2i(x), ..., hNi(x)),其中hji(x)是hi在類別標記cj上的輸出。則投票法包括:
在不容許絕對預測的任務中,絕對多數、相對多數投票法被統稱爲「多數投票法」。
現實任務中,不一樣類型學習器可能產生不一樣的hji(x)值,常見的包括類標記和類機率。
值得注意的是,不一樣類型的預測值hji(x)不能混用。對一些能在預測出類別標記的同時產生分類置信度的學習器,其分類置信度可轉化爲類機率使用。若此類值爲進行規範化,如支持向量機的分類間隔值,則須要採用Platt縮放(Platt scaling)、等分迴歸(isotonic regression)等技術對結果進行「校準」(calibration)後才能做爲類機率使用。
訓練數據不少時,可採用學習法:經過另外一個學習器進行結合。Sacking是學習法的典型表明。這裏將個體學習器稱爲初級學習器,用於結合的學習器稱爲次級學習器,或元學習器(meta-learner)。
Stacking算法描述以下:
輸入:訓練集D = {(x1, y1), (x2, y2), ..., (xm, ym)}; 初級學習算法
; 次學習算法
.
過程:
1: for t = 1 to T do
2: ht =
; //使用初級學習算法
產生初級學習器ht
3: end for
4: D' = Ø; //生成次級訓練集
5: for i = 1 to m do
6: for t = 1 to T do
7: zit = ht(xi);
8: end for
9: D' = D' ∪ ((zi1, zi2, ..., ziT), yi);
10: end for
11: h' =
; //在D'上用次級學習算法
產生次級學習器h'
輸出:H(x) = h'(h1(x), h2(x), ..., hT(x))
次級學習器的輸入屬性和算法對集成的泛化能力有很大影響。具體見書pp.184-185。