面試之-2.0集成學習Boosting和Bagging

集成學習(Ensemble Learning)/多分類系統(Multi-Classifier System)/基於委員會的學習(Community-based Learning)

1. 概念

通過合併多個學習器來完成學習任務
同質學習器中的的個體學習器,叫基學習器,算法叫基學習算法,異質學習器中的個體學習器叫“組件”或直接叫“個體學習器”,算法也不是基學習算法。

2. 特點

一般情況,集成學習要求個體學習器要具有“多樣性”和“準確性”,但是問題在於“多樣性”和“準確性”本身就會有衝突,在實際情況下,如果想產生“好而不同”的分類結果,提高準確性的前提下,必須犧牲多樣性。

3. 分類

根據個體學習器的分類方式,可分類兩大類:

  • 個體學習器之間存在依賴關係,必須串行執行的序列化方法,代表是Boosting
  • 個體學習器之間不存在依賴關係,或者說弱依賴,可以同時並行生成的方法,代表是Bagging和隨機森林

4. Boosting(串行集成)

Boosting是一簇讓弱學習器轉化爲強學習器的算法。機制爲:先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對訓練樣本的分佈進行調整使得先前基學習器做錯的訓練樣本在後續得到更多的關注,然後基於調整後的樣本分佈進行訓練下一個學習器;如此重複,指導基學習器的數量達到閾值TT,最終將這TT個學習器進行加權結合。

最具有代表性的Boosting算法是AdaBoost,數學表示爲:
P(H(x)f(x))=k=0T/2(kT)(1ϵ)kϵTkP(H(\vec x) \neq f(\vec x)) = \displaystyle \sum^{T/2}_{k=0}\Big(^{T}_{k}\Big)(1-\epsilon)^k\epsilon^{T-k}
(8.3)exp(12T(12ϵ)2)\leq exp\Big(-\frac{1}{2}T(1-2\epsilon)^2\Big)\tag{8.3}
其中yi{1,1}y_i \in\{-1, 1\}ff是真是函數。
Adaboost有多種推導方式,比較容易理解的是基於“加性模型”(aditive model),也就是機器學習的線性組合:
(8.4)H(x)=t=1Tαtht(x)H(\vec x) = \sum^T_{t=1} \alpha_th_t(\vec x)\tag{8.4}
來最小化指數損失函數:
(8.5)lexp(HD)=ExD[ef(x)H(x)]l_{exp}(H|D)= \mathbb E_{x\sim D}[e^{-f(\vec x)H(\vec x)}]\tag{8.5}
(注:xxDD中損失爲所有基學習器之和的均值(期望)
ED[f()]\mathbb E_{· \in D_{[f(·)]}}表示函數f(x)f(x)對·在分佈DD下的數學期望)
H(x)H(\vec x)能令指數損失函數最小化,則在(8.5)(8.5)中對H(x)H(x)求偏導:
lexp(HD)H(x)=ef(x)H(x)(f(x))\frac{\partial{l_{exp}(H|D)}}{\partial{H(x)}} = e^{-f(\vec x)H(\vec x)}(-f(\vec x))
=f(x)ef(x)H(x)=-f(\vec x)e^{-f(\vec x)H(\vec x)}
f(x)f(\vec x)分別爲1,1{-1, 1}時則:
(8.6)=eH(x)P(f(x)=1x)+eH(x)P(f(x)=1x)=-e^{-H(\vec x)}P(f(x) = 1| \vec x) + e^{H(\vec x)}P(f(x) = -1| \vec x) \tag{8.6}
(8.6)(8.6)00可得:
(8.7)H(x)=12lnP(f(x)=1x)P(f(x)=1x)H(\vec x)=\frac{1}{2}ln{\frac {P(f(x) = 1 | \vec x)}{P(f(x) = -1 | \vec x)}}\tag{8.7}
因此有
sign(H(x))=sign(12lnP(f(x)=1x)P(f(x)=1x))sign(H(x)) = sign\Big(\frac {1}{2}ln\frac{P(f(x) = 1 | \vec x)}{P(f(x) = -1 | \vec x)}\Big)
={1 P(f(x)=1x)<P(f(x)=1x)1 P(f(x)=1x)>P(f(x)=1x)= \Big\{^{1 \ P(f(x)=1|\vec x) > P(f(x) = -1| \vec x)} _{-1\ P(f(x)=1|\vec x) < P(f(x) = -1| \vec x)}
(8.8)=argmaxy{1,1}P(f(x)=yx)=argmax_{y \in \{-1, 1\}}P(f(x) = y | \vec x)\tag{8.8}
這就意味着H(x)H(\vec x)達到了貝葉斯最優錯誤率。也就是說,如果指數損失函數最小化,則分類錯誤率也將最小化;這說明指數損失函數是分類任務原本0/1損失函數一致的代替損失函數。由於這個代替的損失函數有更好的數學性質(可微)因此常會用指數損失作爲優化目標。

4.1 Adaboost的算法原理

4.1.1 計算第一個基分類器並進行權重更新

在算法中,第一個基分類器h1h_1是通過直接將基學習算法用於初始數據分佈而得;此後迭代地生成hth_tαt\alpha_t,當基分類器hth_t給予分佈DtD_t產生後,該分類器的權重αt\alpha_t應使得αtht\alpha_th_t最小化指數損失函數。
lexp(αthtDt)=ExDt[ef(x)αtht(x)]l_{exp}(\alpha_th_t|D_t) = \mathbb E_{\vec x\sim D_t}\Big[e^{-f(x)\alpha_th_t(\vec x)} \Big]
=ExDt[eαtI(f(x)=h(x))+eαtI(f(x)h(x))]= \mathbb E_{\vec x \sim D_t}[e^{-\alpha_t}\mathbb I (f(\vec x) = h(\vec x)) +e^{\alpha_t}\mathbb I (f(\vec x) \neq h(\vec x))]
=eαtPxD(f(x)=h(x))+eαtPxD(f(x)h(x))=e^{-\alpha_t}P_{\vec x\sim D}(f(\vec x) = h(\vec x)) +e^{\alpha_t}P_{\vec x\sim D}(f(\vec x) \neq h(\vec x))
(8.9)=eαt(1ϵt)+eαtϵt=e^{-\alpha_t}(1-\epsilon_t)+e^{\alpha _t}\epsilon_t\tag{8.9}
其中ϵt=PxD(f(x)h(x))\epsilon_t=P_{\vec x\sim D}(f(\vec x) \neq h(\vec x))。考慮指數損失函數的導數
(8.10)lexp(αthtD)αt=eαt(1ϵ)+eαtϵt\frac{\partial l_{exp}(\alpha_th_t|D)}{\partial\alpha_t} = -e^{-\alpha_t}(1-\epsilon)+e^{\alpha_t}\epsilon_t\tag{8.10}
(8.10)(8.10)爲0可得:
(8.11)αt=12ln(1ϵtϵt)\alpha_t = \frac{1}{2}ln\Big(\frac{1-\epsilon_t}{\epsilon_t}\Big)\tag{8.11}
(8.11)(8.11)爲分類器中的權重更新公式
(I()\mathbb I(·)爲指示函數,在·爲真和假時分別取值爲1和0),上式中對所有xDx\sim D*的值進行0,1計算後求均值,等同於求概率PP
PxDP_{\vec x\sim D}概率質量函數

4 .1.2 根據前面Ht1H_{t-1}個基分類器後調整樣本分佈及損失最小化

AdaBoost算法在獲得Ht1H_{t-1}分類器之後,樣本分佈將進行調整,使下一輪的基學習器hth_t能糾正前面Ht1H_{t-1}的一些錯誤,理想的hth_t能糾正Ht1H_{t-1}的全部錯誤,即最小化。
lexp(Ht1+htD)=ExD[ef(x)(Ht1(x)+ht(x))]l_{exp}(H_{t-1}+h_t | D)=\mathbb E_{\vec x\sim D}[e^{-f(\vec x)(H_{t-1}(\vec x)+h_t(\vec x))}]
(8.12)=ExD[ef(x)Ht1(x)f(x)ht(x)]=\mathbb E_{\vec x \sim D}[e^{-f(\vec x)H_{t-1}(\vec x)-f(\vec x)h_t(\vec x)}]\tag{8.12}
根據泰勒展開式近似計算之後得到理想的學習器爲:
ht(x)=argminhlexp(Ht1+hD)h_t(\vec x)=argmin_hl_{exp}(H_{t-1}+h|D)
=argminhExD[ef(x)Ht1(x)(1f(x)h(x)+12)]=argmin_h \mathbb E_{\vec x\sim D}\Big[e^{-f(\vec x)H_{t-1}(\vec x)}(1-f(\vec x)h(\vec x)+\frac{1}{2}) \Big]
=argmaxhExD[ef(x)ht1(x)]=argmax_h\mathbb E_{\vec x\sim D}[e^{-f(\vec x)h_{t-1}(\vec x)}]
(8.14)=argmaxhExD[ef(x)Ht1(x)ExD[ef(x)Ht1(x)]f(x)h(x)]=argmax_h \mathbb E_{\vec x\sim D}\Bigg[\frac{e^{-f(\vec x)H_{t-1}(\vec x)}}{\mathbb E_{\vec x\sim D}[e^{-f(\vec x)H_{t-1}(\vec x)}]}f(\vec x)h(\vec x) \Bigg]\tag{8.14}
注意到ExD[ef(x)Ht1(x)]\mathbb E_{\vec x\sim D}[e^{-f(\vec x)H_{t-1}(\vec x)}]爲常數,另DtD_t表示分佈:
(8.15)Dt(x)=Dxef(x)Ht1(x)ExD[ef(x)Ht1(x)]D_t(\vec x)=\frac{D_{\vec x}e^{-f(\vec x)H_{t-1}(\vec x)}}{\mathbb E_{\vec x\sim D}[e^{-f(\vec x)H_{t-1}(\vec x)}]}\tag{8.15}
則根據數學期望的定義,上式等價於
htx=argmaxhExD[ef(x)Ht1(x)ExD[ef(x)Ht1(x)]f(x)h(x)]h_t{\vec x}=argmax_h\mathbb E_{\vec x\sim D}\Bigg[\frac{e^{-f(\vec x)H_{t-1}(\vec x)}}{\mathbb E_{\vec x\sim D}[e^{-f(\vec x)H_{t-1}(\vec x)}]}f(\vec x)h(\vec x) \Bigg]
(8.16)=argmaxhExD[f(x)h(x)]=argmax_h\mathbb E_{\vec x\sim D}[f(\vec x)h(\vec x)]\tag{8.16}
f(x),h(x){1,1}f(\vec x),h(\vec x) \in \{-1, 1\},有
(8.17)f(x)h(x)=12I(f(x)h(x))f(\vec x)h(\vec x)=1-2\mathbb I(f(\vec x) \neq h(\vec x))\tag{8.17}
則理想的基學習器:
(8.18)ht(x)=argminhExDt[I(f(x)h(x))]h_t(\vec x)=argmin_h \mathbb E_{\vec x \sim D_t}[\mathbb I(f(\vec x)\neq h(\vec x))]\tag{8.18}
由此可見,理想的hth_t將在分佈DtD_t下最小化分類誤差,因此弱分類器將基於分佈DtD_t來訓練,另外DtD_tDt+1D_{t+1}的關係:
Dt+1(x)=Dxef(x)Ht(x)ExD[ef(x)Ht(x)]D_{t+1}(\vec x)=\frac{D_{\vec x}e^{-f(\vec x)H_{t}(\vec x)}}{\mathbb E_{\vec x\sim D}[e^{-f(\vec x)H_{t}(\vec x)}]}
(8.19)=Dt(x)ef(x)αtht(x)ExD[ef(x)Ht1(x)]ExD[ef(x)Ht(x)]=D_t(\vec x)·e^{-f(\vec x)\alpha_th_t(\vec x)\frac{\mathbb E_{\vec x\sim D}[e^{-f(\vec x)H_{t-1}(\vec x)}]}{\mathbb E_{\vec x\sim D}[e^{-f(\vec x)H_t(\vec x)}]}}\tag{8.19}
(8.19)(8.19)爲樣本分佈的更新公式。
目前爲止,從8.11和8.19可見,從基於加性模型迭代式優化指數損失函數的角度導出了Adaboost算法.在這裏插入圖片描述

4.2 注意

Boosting算法要求基學習器對特定的數據分佈進行學習,可以通過“重賦權法”實施,即在每一輪的訓練過程中,根據樣本分佈爲每個訓練樣本重新賦予一個權重。

對於無法接受帶權樣本的基學習算法,可通過“重採樣法”進行處理,即在每一輪學習中,根據樣本分佈對訓練集重新進行採樣,在用重採樣而得的樣本對基學習器進行訓練。

需要注意的是,Boosting算法在訓練的每一輪都會檢查當前生成的基學習器是否滿足條件,一旦不滿足學習器就會被拋棄,且學習過程停止,在這種情況下,初始設置的學習輪數TT還沒達到設定值,導致性能不佳,如果採用“重採樣”,可以獲得“重啓動機會”,避免過早結束,即在拋棄不滿足條件的基學習器之後,可根據當前分佈進行重採樣,再基於新的採樣結果訓練新的基學習器。

從偏差-方差角度看,Boosting主要關注降低偏差。

5 Bagging和隨機森林(並行集成)

5.1 Bagging(Bootstrap AGGrepatING)

5.1.1 Bagging是並行集成學習方法的代表,方法步驟爲:

  1. 給定一個含有mm個樣本的數據集,隨機抽取樣本放入採樣集中,然後再將該樣本放回到初始數據集中
  2. 進行mm次隨機採樣操作,得到一個包含mm個樣本的採樣集
  3. 持續採樣,採樣出TT個包含mm個訓練樣本的採樣集
  4. 針對每個採樣集,訓練一個基學習器,然後再將基學習器進行結合
  5. 根據任務要求對輸出做處理:分類用投票法,迴歸用簡單平均法

Bagging集成的計算複雜度大致爲O(m)O(m)與計算一個基學習器的複雜度同階,另外Adaboost只適用於二分類,但Bagging可以用於多分類個迴歸

優點:由於是有放回的採樣,所以基學習器只使用了63.2%63.2\%初始數據集樣本量,剩下的32.8%32.8\%可用於“包外估計”

5.1.2 “包外估計”(out-of-bag estimate)

不妨另DtD_t表示hth_t實際使用的樣本集,Hoob(x)H^{oob}(\vec x)表示對樣本x\vec x的包外預測,即僅考慮那些未使用x\vec x訓練的基學習器在x\vec x上的預測,有:
(8.20)Hoob(x)=argmaxyγt=1TI(ht(x)=yI(xDt))H^{oob}(\vec x)=argmax_{y\in \gamma}\sum^T_{t=1}\mathbb I(h_t(\vec x)=y·\mathbb I(\vec x \notin D_t))\tag{8.20}
則Bagging泛化誤差的包外估計爲:
(8.21)ϵoob=1D(x,yD)I(Hoob(x)γ)\epsilon^{oob}=\frac{1}{|D|}\sum_{(x,y\in D)}\mathbb I(H^{oob}(\vec x)\notin \gamma)\tag{8.21}
在這裏插入圖片描述
包外估計的其他用途:

  • 當基學習器是決策樹時:1)輔助剪枝;2)估計決策樹中各節點的後驗概率以輔助對零訓練樣本節點的處理
  • 當基學習器是神經網絡時:輔助早期停止,減少過擬合風險

從偏差-方差角度看,Bagging主要用於降低方差。

5.2 隨機森林(Random Forest,RF)

隨機森林是Bagging的擴展變體,在以基學習器構建Bagging的基礎上,進一步在決策樹的訓練過程中隨機屬性選擇,具體來說就是,傳統決策時在選擇劃分屬性時,是在當前節點的屬性集合(假設有dd個屬性)中找出最優屬性;而在RF中:

  1. 對基決策樹的每個節點,先從該節點的屬性集合中隨機選擇一個包含kk個屬性的子集
  2. 從這個子集中選出最優屬性用於劃分,這裏的kk控制隨機性的引入程度,如果k=dk=d就是傳統的決策樹,如果k=1k=1表示隨機抽取一個屬性進行劃分;一般情況k=log2dk = log_2^d

6 Bagging和Boosting的區別

  1. (樣本集角度)bagging的訓練集是隨機的,各訓練集是獨立的;而boosting訓練集的選擇不是獨立的,每一次選擇的訓練集都依賴於上一次學習的結果;
  2. (權重角度)bagging的每個預測函都沒有權重;而boosting根據每一次訓練的訓練誤差得到該次預測函數的權重
  3. (預測角度)bagging的各個預測函數可以並行生成;而boosting只能順序生成。(對於神經網絡這樣極爲耗時的學習方法,bagging可通過並行訓練節省大量時間開銷)

7 結合策略

優點:

  1. 提高泛化性
  2. 降低局部極小點的風險
  3. 更加接近真實的假設空間

7.1 平均法

對數值型輸出hi(x)Rh_i(\vec x) \in \mathbb R最常用平均法

7.1.1 簡單平均法

(8.22)H(x)=1Ti=1Thi(x)H(\vec x) = \frac{1}{T}\sum^T_{i=1}h_i(\vec x)\tag{8.22}

7.1.2 加權平均法

(8.23)H(x)=i=1Tωihi(x)H(\vec x)=\sum^T_{i=1}\omega_ih_i(\vec x)\tag{8.23}
一般情況下,要求ω>0\omega>0,且i=1Tωi=1\sum^T_{i=1}\omega_i = 1代表對每個基學習器加入的權重。

7.1.3 適用範圍

一般情況下,個體學習器性能相差較大時,使用加權平均,個體學習器性能相近是使用簡單平均法

7.2 投票法

對分類任務來說,學習器hih_i將從類別標記集合{c1,c2,c3,cN}\{c_1, c_2, c_3, c_N\}中預測出一個標記,最常見的就是投票法

定義:將hih_i在樣本x\vec x上的預測輸出定義爲一個NN維向量{hi1(x),hi2(x),hiN(x)}\{h_i^1(\vec x), h_i^2(\vec x), h_i^N(x)\},其中,hijh_i^j表示學習器hih_i在類別cjc_j上的輸出。

7.2.1 絕對多數投票法

(8.24)H(x)={reject,otherwisecj,ifi=1Thij(x)>0.5k=1Ni=1Thik(x)H(\vec x) = \Bigg\{^{c_j,\qquad if \displaystyle\sum^T_{i=1}h_i^j(\vec x)>0.5\displaystyle\sum_{k=1}^N\sum^T_{i=1}h_i^k(\vec x) }_{reject,\qquad otherwise}\tag{8.24}
若某標記得票數過半,則預測爲該標記,否則拒絕預測

7.2.2 相對多數投票法

(8.25)H(x)=cargmaxji=1Thij(x)H(\vec x)=c_{argmax_j\sum^T_{i=1}h^j_i(\vec x)}\tag{8.25}
預測爲得票最多的標記,若同時有標記得票最高,則從中隨機選出一個

7.2.3 加權投票法

(8.26)H(x)=cargmaxji=1Tωihij(x)H(\vec x)=c_{argmax_j\sum^T_{i=1}\omega_ih_i^j(\vec x)}\tag{8.26}
與加權平均法類似,要求ω>0\omega>0,且i=1Tωi=1\sum^T_{i=1}\omega_i = 1代表對hih_i的權重。

7.2.4投票方式比較

絕對多數投票應用於可靠性要求較高的學習任務中,如果學習任務要求必須有預測結果,則得選擇後兩種作方式。
(2.4)(2.6)(2.4)\sim(2.6)中沒有限制個體學習器輸出值了類型一般有:

  1. 類標記:hij(x){0,1}h^j_i(\vec x)\in \{0, 1\},若hih_i將樣本xx預測爲cjc_j,則取值1,反之,取0,稱爲“硬投票”
  2. 類概率:hij(x)[0,1]h^j_i(\vec x)\in [0, 1],相當於對後驗概率P(cjx)P(c_j|\vec x)的一個估計,稱爲“軟投票”

7.3 學習法

學習法是通過與另一個學習器結合的策略,Stacking是學習法的代表,其中個體學習器稱爲初級學習器(可以是同質的也可以是異質的),用於結合的學習器稱爲次級學習器步驟:

  1. Stacking先從初始訓練集中訓練處初級學習器
  2. . 然後“生成”一個新的數據集用預訓練次級學習器。在新的訓練集中,初級學習器的輸出被當做樣例輸入特徵,初始樣本的標記作爲樣例標記

8 多樣性

8.1 誤差-分歧分解

8.2 多樣性度量

  • 不合度量
  • Q-統計量
  • k-統計量
  • 相關係數

8.3多樣性增強

  • 數據樣本擾動
  • 輸入屬性擾動
  • 輸出表示擾動
  • 算法參數擾動

參考鏈接

https://www.jianshu.com/p/ee39d1b15471
周志華 機器學習(西瓜書)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章