boosting 3大算法總結

boosting 3大算法總結

以前的兩篇文章 adaboost 原理boosting原理 寫完後,感受仍是沒有特別弄明白boost,全部就有了本文。算法

集成學習

首先咱們須要知道什麼是集成學習? 集成學習是經過訓練弱幹個弱學習器,並經過必定的結合策略,從而造成一個強學習器。dom

整個過程有兩個難點:機器學習

  • 如何獲得若干個個體學習器
  • 如何選擇一種結合策略

先來看第一個問題如何獲取個體學習器,在選擇上有兩個:函數

  1. 同質學習器,例如隨機森林都使用cart樹
  2. 異質學習器,例如使用不一樣的分類器,最終採起投票的方式

其中用的比較多的是同質學習器。同質學習器按照個體學習器之間是否存在依賴關係能夠分爲兩類:學習

  • 第一個是個體學習器之間存在強依賴關係,一系列個體學習器基本都須要串行生成,表明算法是boosting系列算法;
  • 第二個是個體學習器之間不存在強依賴關係,一系列個體學習器能夠並行生成,表明算法是bagging和隨機森林(Random Forest)系列算法。

本文重點講boosting算法。3d

boosting基本原理

關於boosting算法,咱們須要知道其中最有名的3個算法:rest

  • Adaboost(Adaptive Boosting)
  • GBM(Gradient Boosting Machine)
  • XGBoost

GBM

咱們先來看 GBM ,其思路是逐步提高,怎麼理解呢?cdn

咱們先看來梯度提高算法:首先給定一個損失函數 L(y,F(x)),其輸入是訓練對:(x1,y1),(x2,y2),...,(xn,yn),目標是找到最優的F(x),使得損失函數L最小,按照傳統梯度降低的方法,咱們會將訓練數據(xi,yi)帶入,而後求L對參數的偏導,再用負梯度進行參數更新: blog

這麼作的一個前提是咱們須要保證損失函數Loss對F可微,F對參數 \theta 可微,第二個可微能夠說比較困難,因而咱們直接在函數空間F中對F進行求解,咱們假設f是一系列數值疊加而來:
其中每一個 \theta\phi 經過下面求極小值獲取:

針對上面 \theta\phi 的求取上,有兩種成熟的方法:ci

  • Gradient Descent
  • Newton’s Method

也就分別對應了 GBM 和 XGBoost,先來說 GBM。

咱們對 \theta\phi 極小值的求取上,在 fm上採起一階泰勒展開,此時求倒數獲得:

那根據一階泰勒,此時求loss的極小值,至關讓f沿着負梯度的方向走,則必然隨着f的迭代,loss是減少的,如今咱們來總結下問題:

咱們將已知輸入數據從 (xi,yi) 轉變到了 (xi,-gm(xi)),咱們如今要用函數 \phi_m 去擬合 (xi,-gm(xi)),而且評判標準以下:

當咱們學習到了\phi_m,咱們再去看最佳步長應該是多少:

總結下整個過程:

有了上面這個過程後,咱們還有一步須要確認的是怎麼求最優的 \phi_m ,如今咱們假設 \phi_m 是樹模型,此時咱們須要學習 樹的結構以及每一個葉子節點的權重。

先來學習樹結構.

咱們假設樹能夠分爲T個節點,而且每一個節點權重爲wj,則:

其中 n_jm 是在第j個葉子數據點的個數,針對上面的式子,咱們定義 G_jm 爲第j個葉子節點中全部數據的梯度和,而且將常數項gm去除,咱們獲得:

所以若是樹的結構固定,咱們能夠獲得全部的葉子權重爲:
咱們將其帶回入loss函數,能夠獲得:
下面咱們來決定一個葉子節點是否應該繼續分裂,咱們能夠計算分裂後的loss變化:
若是gain>0則分裂,不然則爲葉子節點。

如今當咱們學習到真正的樹結構後,咱們再去從新學習最優的樹權重:

wjm是第j個葉子節點的權重,如今整個算法的流程以下:

Adaboost

咱們在Adaboost原理一文中給出了算法流程:

咱們能夠從下面4個問題來理解Adaboost算法:

  • 1)如何計算學習偏差率e?
  • 2 ) 如何獲得弱學習器權重係數α?
  • 3)如何更新樣本權重D?
  • 4 ) 使用何種結合策略?

第一個問題:學習偏差率e的計算,第m個弱分類器的偏差率爲訓練集上的加權錯誤率:

此處分母其實爲1,能夠省略。 第二個問題:弱分類器權重。
爲何這樣計算弱學習器權重係數?從上式能夠看出,若是分類偏差率ek越大,則對應的弱分類器權重係數αm越小。也就是說,偏差率小的弱分類器權重係數越大。 第三個問題:如何進行權重更新
對於分類正確的,權重下降,對於分類錯誤的,權重增長 第四個問題:集合策略。Adaboost分類採用的是加權平均法,最終的強分類器爲

提高方法

以上內容是咱們在文章 Adaboost 原理中講的,咱們本文來看看其實怎麼符合上文GBM原理的.GBM的算法原理以下:

Adaboost中loss爲指數損失:
此時第m輪迭代,咱們要求:
接下去是重點了,咱們此處如何求最佳的 \alpha_m , G_m,由於loss函數是指數損失,我麼很容易的經過化解、求導直接獲得最佳的 \alpha_m , G_m,下面是具體的推導:
因而咱們求最佳的G_m即爲:
接着咱們對 \alpha_m 進行求導,獲得:

XGBOOST

XGBOOST但願直接求解下面的式子從而獲得最優的fm

咱們能夠在fm-1處進行二階泰勒展開,獲得:
進一步化解獲得:
咱們讓G_jm和H_jm分別表示在Region j中的和,因而有:
此時咱們對wjm求導,就能獲得最佳的wjm:
代回loss中:
此時根據loss,我麼就能夠學習到樹的結構:
整個算法描述以下:
在xgboost中,還加入了正則項來防止過擬合:
其中γ是對葉節點的懲罰,α 和 λ 分別是L1和L2正則,此時最優的wjm爲:
此時計算增益公式爲:

總結

本文介紹了boosting算法中最著名的3個算法

  • Adaboost(Adaptive Boosting)
  • GBM(Gradient Boosting Machine)
  • XGBoost

而且介紹了Adaboost是GMB中損失函數爲指數損失的特例,後續還會有兩篇文章,一篇介紹adaboost 算法的變種,另外一篇結合代碼來介紹3個算法。

你的鼓勵是我繼續寫下去的動力,期待咱們共同進步。

這個時代,每一個人都是超級個體!關注我,一塊兒成長!

參考

Tree Boosting With XGBoost: Why Does XGBoost Win 「Every」 Machine Learning Competition?

Gradient Boosting from scratch

Boosting algorithm: XGBoost

機器學習(23)之GBDT詳解

Gradient Boosting from scratch

相關文章
相關標籤/搜索