4. 集成學習(Ensemble Learning)Adaboost


1. 集成學習(Ensemble Learning)原理

2. 集成學習(Ensemble Learning)Bagging

3. 集成學習(Ensemble Learning)隨機森林(Random Forest)

4. 集成學習(Ensemble Learning)Adaboost

5. 集成學習(Ensemble Learning)GBDT

6. 集成學習(Ensemble Learning)算法比較

7. 集成學習(Ensemble Learning)Stacking

1. 前言

前面我們已經詳細的介紹了什么是集成學習,集成學習的種類有哪些,並且也介紹了集成學習里面相對比較簡單的Bagging。今天我們開始涉及到集成學習里面比較難理解的Boosting中的Adaboost。

2. Boosting原理

Boosting算法的工作機制:

  1. 首先從訓練集用初始權重訓練出一個弱學習器1.
  2. 根據學習器1的學習誤差率來更新訓練樣本的權重,使得之前弱學習器1學習誤差率高的訓練樣本點的權重變高,使得這些誤差率高的點在后面的弱學習器2中得到更多的重視。
  3. 然后基於調整權重后的訓練集來訓練弱學習器2。
  4. 如此重復進行,直到弱學習器數達到事先指定的數目\(T\)
  5. 最終將這\(T\)個弱學習器通過集合策略進行整合,得到最終的強學習器。

image

這里有幾個相關概念:

  1. 學習誤差率\(e\)
  2. 學習器權重\(\alpha\)
  3. 更新下一次訓練樣本的權重\(D\)
  4. 最后如何結合所有的弱學習器

我們通過詳細介紹Adaboost的分類算法,一步一步的講解上面提到的幾個過程

3. Adaboost

我們的訓練樣本是

\[T=\{(x_1,y_1),(x_2,y_2), ...(x_m,y_m)\} \]

訓練集的第\(k\)個弱學習器的輸出權重為:

\[D(k) = (w_{k1}, w_{k2}, ...w_{km}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m \]

  • 首先我們看下第\(k\)個弱學習器的錯誤率\(e_k\),因為我們是二分類問題,所以我們的的錯誤率是所有誤分類的樣本的權重和如下,其中求和的是誤分類的樣本的集合。

\[e_k = \sum\limits_{i=1}^mw_{ki} \]

  • 得到了\(e_k\),我們就能去計算弱學習器在最后結合的時候的權重系數\(\alpha_k\),根據下面的公式,我們發現,當\(e_k\)越大,則\(\alpha_k\)越小。這也符合大家的直觀感受。

\[\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k} \]

  • 更新下一個弱學習器的權重\(D(k+1) = (w_{(k+1)1}, w_{(k+1)2}, ...w_{(k+1)m})\)

\[w_{k+1,i} = \frac{w_{ki}}{Z_K}exp(-\alpha_ky_iG_k(x_i)) \]

\[Z_k = \sum\limits_{i=1}^{m}w_{ki}exp(-\alpha_ky_iG_k(x_i)) \]

上面公式中\(G_k()\)是第\(k\)個弱學習器,從\(w_{(k+1)i}\)計算公式可以看出,如果第\(i\)個樣本分類錯誤,則\(y_iG_k(x_i)<0\),導致樣本的權重在第\(k+1\)個弱分類器中增大,如果分類正確,則權重在第\(k+1\)個弱分類器中減少.具體為什么采用樣本權重更新公式,我們在講Adaboost的損失函數優化時再講。

  • 還剩下一個如何組合所有弱學習器的問題

\[f(x) = sign(\sum\limits_{k=1}^{K}\alpha_kG_k(x)) \]

4. Adaboost分類損失函數

首先我們定義一個Adaboost的損失函數為:

\[arg\;min\sum\limits_{i=1}^{m}exp(-y_if_{k}(x)) \]

其中

\[f_{k-1}(x) = \sum\limits_{i=1}^{k-1}\alpha_iG_{i}(x) \]

\[f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x) \]

\(f_k(x)\)帶入損失函數得到

\[arg\;min\sum\limits_{i=1}^{m}exp[(-y_i) (f_{k-1}(x) + \alpha_k G_k(x))] \]

我們令\(w_{ki} = exp(-y_if_{k-1}(x))\), 它的值不依賴於\(\alpha, G\),因此與最小化無關,僅僅依賴於\(f_{k-1}(x)\),隨着每一輪迭代而改變。

將這個式子帶入損失函數,損失函數轉化為

\[arg\;min\sum\limits_{i=1}^{m}w_{ki}exp[-y_i\alpha G(x)] \]

又因為我們可以計算

\[G_k(x) = arg\;min\sum_{i=1}^mw_{ki} \]

\(G_k(x)\)帶入損失函數,並對\(\alpha\)求導,使其等於0,則就得到了

\[\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k} \]

最后看樣本權重的更新。利用\(f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x)\)\(w_{ki} = exp(-y_if_{k-1}(x))\),即可得:

\[w_{k+1,i} = w_{ki}exp[-y_i\alpha_kG_k(x)] \]

5. Adaboost算法的正則化

為了防止Adaboost過擬合,我們通常也會加入正則化項,這個正則化項我們通常稱為步長(learning rate)。定義為\(\nu\),對於前面的弱學習器的迭代

\[f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x) \]

如果我們加上了正則化項,則有

\[f_{k}(x) = f_{k-1}(x) + \nu\alpha_kG_k(x) \]

\(\nu\)的取值范圍為\(0 < \nu \leq 1\)。對於同樣的訓練集學習效果,較小的\(\nu\)意味着我們需要更多的弱學習器的迭代次數。通常我們用步長和迭代最大次數一起來決定算法的擬合效果。

6. 總結

到這里Adaboost就寫完了,前面有一個沒有提到,就是弱學習器的類型。理論上任何學習器都可以用於Adaboost.但一般來說,使用最廣泛的Adaboost弱學習器是決策樹和神經網絡。對於決策樹,Adaboost分類用了CART分類樹,而Adaboost回歸用了CART回歸樹。

這里對Adaboost算法的優缺點做一個總結。
Adaboost的主要優點有:

  1. Adaboost作為分類器時,分類精度很高
  2. 在Adaboost的框架下,可以使用各種回歸分類模型來構建弱學習器,非常靈活。
  3. 作為簡單的二元分類器時,構造簡單,結果可理解。
  4. 不容易發生過擬合

Adaboost的主要缺點有:

  1. 對異常樣本敏感,異常樣本在迭代中可能會獲得較高的權重,影響最終的強學習器的預測准確性。


免責聲明!

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



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