03整合學習-Boosting-AdaBoost演算法原理

白爾摩斯發表於2018-11-19

02 整合學習 – 特徵重要度、Extra Tree、TRTE、IForest、隨機森林總結

八、Boosting 提升學習

提升學習是一種機器學習技術,可以用於__迴歸__和__分類__問題。它每一步產生__弱預測模型__ (如決策樹),並__加權累加__到總模型中。如果每一步的弱預測模型的生成都是依據損失函式的梯度方式的,那麼稱為__梯度提升__(Gradient Boosting)。

提升技術的意義: 如果一個問題存在__弱預測模型__,那麼可以通過Boosting技術得到一個__強預測模型__。

常見的模型有: Adaboost、Gradient Boosting(GBT/GBDT/GBRT)、XGBoost、LightGBM。

Boosting的演算法思路

不同模型在Boosting處理過程中的差異體現在根據效果更改資料這一步。


回顧: 隨機森林演算法
1、隨機有放回抽樣,選取S個資料集,建立S個模型。
2、在每一個基模型構建過程中,對於劃分決策樹時,隨機選擇K個特徵進行劃分。

隨機森林演算法本身(bagging方法),不會對原有資料集中的資料內容進行改變,只是對資料集進行隨機抽樣。

01 整合學習 – 概述、Bagging – 隨機森林、袋外錯誤率


提升學習演算法:
bagging演算法不會更改原有資料的值,但是在Boosting演算法中會根據模型訓練的結果,通過某種演算法,對原有資料的值進行更改,再建立下一個模型。

九、AdaBoost演算法原理

百度百科說得挺好:
https://baike.baidu.com/item/adaboost/4531273?fr=aladdin

Adaptive Boost 是一種迭代演算法。每一輪迭代後生成一個新的學習器,然後對樣本進行預測。 預測對的__權重__減小,預測錯的__權重__增加。__權重__越高在下一輪的迭代中佔的比重就越大,即越難區分的樣本在樣本中會越重要。

整個迭代當錯誤率足夠小,或迭代次數到一定次數停止。

下圖虛線代表每次預測的分割線,預測成功的點會變小,預測失敗的點會變大。一共進行了6次迭代。

迭代示例

上述是對樣本層面的調整,下面看看對模型的調整。

注意,為了方便區分,本文對一概念做個定義上的區分:對樣本比重的調整本文統稱為權重,對模型比重的調整本文稱為權值。

Adaboost演算法將基分類器的線性組合作為強分類器,同時給分類誤差率較小的基分類器以大的__權值__,給分類誤差率較大的基分類器以小的__權值__。構建的線性組合為:

GmG(x): 基分類器;__α m :__ 權值;

最終分類器是線上性組合的基礎上,f(x) 很有可能是一個連續的值,那麼如果對連續值進行分類操作?我們可以用Sign函式進行轉換。


補充知識:
sign(x)或者Sign(x)叫做符號函式,在數學和計算機運算中,其功能是取某個數的符號(正或負):
當x>0,sign(x)=1; 當x=0,sign(x)=0; 當x<0, sign(x)=-1;

Sign函式


最終的強學習器

f(x)可能是連續值,經過sign函式處理後,最終得到的G(x)的取值不是1就是-1。這是Adaboost演算法中必要重要的一環,目前對於Adaboost演算法瞭解到這個程度即可。

最終強學習器G(x)的損失函式:

損失函式

損失函式(代價函式越小越好),反應了模型的好壞。這是一個示性函式(0,1損失函式)。
考慮單個樣本的情況:即當滿足 G(x)≠y 時,說明預測錯了取1。G(x)=y,說明預測對了取0。
最後累加n個樣本對應的取值,求平均值。

如果4個樣本,最後I(G(x)≠y) 計算後的值分別問:0,0,1,0;說明3個預測對了,一個預測錯了,即loss=1/4;

PS:這裡的取值不是連續的,下面介紹連續取值的損失函式:


__解析:__先來考慮單個損失情況。注意:下面這個式子是恆成立的,我們一步一步來分解該公式。
單個樣本

1、當預測值不等於真實值,即G(x)≠y的時候,說明真實值和預測值是異號的 => __yG(x) < 0__;又∵G(x) = sign(f(x)),f(x)是正的時候,G(x)=1。f(x)是負的時候,G(x)=-1。∴ f(x)和G(x)是同號的。所以 => __yf(x) < 0__;

2、當預測值等於真實值,即G(x)=y的時候, __yf(x) > 0__;

3、__-yf(x)__ 是e指數函式的自變數。

3、觀察下面e的指數函式圖:
當x<0時,ex 的取值為 (0,1);
當x=0時,ex=1;
當x>0時,ex 的取值為 (1,+);

4、 結合上述公式進行推導:
令 -yG(x) = k,
當G≠y時,k>0, 得: e^k 取值 (1,+),此時 I(G≠y)=1;
當G=y時,k<0, 得: e^k 取值 (0,1),此時 I(G≠y)=0;
無論如何,I(G≠y) < e^k;

上圖單個樣本的恆不等式得證。

e的指數函式

將單個樣本的恆不等式進一步推演到整個樣本的範圍,不等式依然恆成立:

損失函式

例子:
1號樣本預測準確,左式=0,右式= (0,1)
2號樣本預測錯誤,左式=1,右式= (1,+∞)
3號樣本預測準確,左式=0,右式= (0,1)
1~3號樣本加和,左邊<右邊;

最終推論: 當右邊式子達到最小值的時候,左邊的式子也能達到最小,此時損失函式最小。這個公式的優點在於我們能構建出一個連續的損失函式,和上面提到的01損失函式等價,都可以衡量系統的好壞。


進一步思考:

如上圖所示:
第一輪:最初我們根據樣本訓練,得到了弱學習器①。α1×弱學習器① = 強學習器①。
第二輪:上一輪預測錯誤的樣本加大權重,正確的缺少權重,訓練得到弱學習器②。α1×弱學習器①+α2×弱學習器② = 強學習器②
….

第k-1輪的強學習器

1、第k輪的強學習器可以用k-1輪的學習器+第k輪的弱學習器×權值來代替:

第k輪的強學習器

2、將fk(x)代入損失函式:

3、得:由第m步生成的基模型和第m步基模型的權值兩個未知量,構成的損失函式

損失函式


進一步思考:

我們構建損失函式的目的是讓損失函式值最小。即讓上面得到的公式:__由第m步生成的基模型和第m步基模型的權值兩個未知量,構成的損失函式__ 最小。

當我們建立第m個模型的時候,前面m-1個模型必然已經構建完成。所以__fm-1(x)__是已知量,我們認為這部分公式是一個常數,對於求損失函式的最小值沒有影響。

1、使下列公式達到最小值的αm和Gm就是AdaBoost演算法的最終求解值。

2、G這個分類器在訓練過程中,就是為了讓誤差率最小,所以可以認為G越小就是誤差率約小。

其中I(y≠G)代表預測錯誤的次數 : 想讓損失函式最小,自然意味著希望預測錯誤率越小越好。

ξm=P(G≠y) 是誤差率,即預測值不等於真實值的概率。預測錯誤的個數/整個樣本數量。

求解Gm的目標

3、對於αm而言,通過求導然後令導數為0,可以得到公式(log物件可以以e為底也可以以2為底):

α*m是第m個基學習器的權值。權值和誤分率ξm有關。
(1-ξm) / ξm : 當誤分率越小的時候,這個公式值越大。ln後的值也越大。α*m權值也就越大。

這個思路也我們最初求權值的思想一致:__要為每個基模型附權,錯誤率越小權值越大。__

這個公式的推導過程比較複雜,暫時記住這個結論即可。


相關文章