機器學習 | 詳解GBDT梯度提升樹原理,看完再也不怕面試了


本文始發於個人公眾號:TechFlow,原創不易,求個關注


今天是機器學習專題的第30篇文章,我們今天來聊一個機器學習時代可以說是最厲害的模型——GBDT。

雖然文無第一武無第二,在機器學習領域並沒有什么最厲害的模型這一說。但在深度學習興起和流行之前,GBDT的確是公認效果最出色的幾個模型之一。雖然現在已經號稱進入了深度學習以及人工智能時代,但是GBDT也沒有落伍,它依然在很多的場景和公司當中被廣泛使用。也是面試當中經常會問到的模型之一。

遺憾的是市面上關於GBDT的資料雖然不少,但是很少有人把其中的核心精髓介紹清楚的。新手在初學的時候往往會被”梯度“,”殘差“等這些令人費解的概念給困惑住,耽誤了算法原理的學習和理解。但其實GBDT整體的原理還是比較直觀和簡單的,只要我們找對了方法,抓住了核心,我相信對於絕大多數人來說,應該都不會問題。

GBDT基礎概念

GBDT的英文原文是Gradient Boosting Decision Tree,即梯度提升決策樹。從它的英文表述我們可以看出來,GBDT的基礎還是決策樹。決策樹我們在之前的文章當中曾經有過詳細的討論,我們這里就不再贅述了。在GBDT當中用到的主要是決策樹的CART算法,在CART算法當中,我們每次都會選擇一個特征並且尋找一個閾值進行二分。將樣本根據閾值分成小於等於閾值的以及大於閾值的兩個部分,在CART樹當中,同一個特征可以重復使用,其他類似的ID3和C4.5都沒有這個性質。

另外一個關鍵詞是Boosting,Boosting表示一種集成模型的訓練方法,我們之前在介紹AdaBoost模型的時候曾經提到過。它最大的特點就是會訓練多個模型,通過不斷地迭代來降低整體模型的偏差。比如在Adaboost模型當中,會設置多個弱分類器,根據這些分類器的表現我們會給與它們不同的權值。通過這種設計盡可能讓效果好的分類器擁有高權重,從而保證模型的擬合能力。

但GBDT的Boosting方法與眾不同,它是一個由多棵CART決策回歸樹構成的加法模型。我們可以簡單理解成最后整個模型的預測結果是所有回歸樹預測結果的和,理解了這一點對於后面理解梯度和殘差非常重要。

我們可以試着寫一下GBDT的預測公式:

公式中的M表示CART樹的個數, 表示第i棵回歸樹對於樣本的預測結果,其中的 表示每一棵回歸樹當中的參數。所以整個過程就和我剛才說的一樣,GBDT模型最后的結果是所有回歸樹預測結果的加和

但是這就有了一個問題,如果是回歸問題那還好說,如果是分類問題那怎么辦?難道分類結果也能加和嗎?

其實也是可以的,我們知道在邏輯回歸當中,我們用到的公式是 ,這個式子的結果表示樣本的類別是1的概率。我們當然不能直接來擬合這個概率,但是我們可以用加和的方式來擬合 的結果,這樣我們就間接得到了概率。

今天的文章當中我們主要先來講解回歸問題,因為它的公式和理解最直觀簡單。分類的問題我們將會放到下一篇文章當中,因此這里稍作了解即可。

梯度和殘差

下面我們要介紹到梯度和殘差的概念了,我們先來回顧一下線性回歸當中梯度下降的用法。

在線性回歸當中我們使用梯度下降法是為了尋找最佳的參數,使得損失函數最小。實際上目前絕大多數的模型都是這么做的,計算梯度的目的是為了調整參數。但是GBDT不同,計算梯度是為了下一輪的迭代,這句話非常關鍵,一定要理解。

我們來舉個例子,假設我們用線性回歸 擬合一個值,這里的目標y是20。我們當前的 得到的 是10,那么我們應該計算梯度來調整參數 ,明顯應該將它調大一些從而降低偏差。

但是GBDT不是這么干的,同樣假設我們第一棵回歸樹得到的結果也是10,和真實結果相差了10,我們一樣來計算梯度。在回歸問題當中,我們通常使用均方差MSE作為損失函數,那么我們可以來算一下這個函數的梯度。我們先寫出損失函數的公式:

L關於 的負梯度值剛好等於 ,看起來剛好是我們要預測的目標值減去之前模型預測的結果。這個值也就是我們常說的殘差。

我們用 表示第m棵回歸樹對於樣本i的訓練目標,它的公式為:

從直觀上來講究很簡單了,我們要預測的結果是20,第一棵樹預測了10,相差還剩10,於是我們用第二棵樹來逼近。第二棵樹預測了5,相差變成了5,我們繼續創建第三棵樹……

一直到我們已經逼近到了非常接近小於我們設定的閾值的時候,或者子樹的數量達到了上限,這個時候模型的訓練就停止了。

這里要注意,不能把殘差簡單理解成目標值和 的差值,它本質是由損失函數計算負梯度得到的。

訓練過程

我們再把模型訓練的整個過程給整理一下,把所有的細節串聯起來。

首先我們先明確幾個參數,M表示決策樹的數量。 表示第m輪訓練之后的整體, 即為最終輸出的GBDT模型。

  1. 初始化

    首先,我們創建第一棵回歸樹即 ,在回歸問題當中,它是直接用回歸樹擬合目標值的結果,所以:

  2. 迭代

    i. 對於第2到第m棵回歸樹,我們要計算出每一棵樹的訓練目標, 也就是前面結果的殘差:

    ii. 對於當前第m棵子樹而言,我們需要遍歷它的可行的切分點以及閾值,找到最優的預測值c對應的參數,使得盡可能逼近殘差,我們來寫出這段公式:

    這里的 指的是第m棵子樹所有的划分方法中葉子節點預測值的集合,也就是第m棵回歸樹可能達到的預測值。其中j的范圍是1,2,3...J。

    接着,我們更新 ,這里的I是一個函數,如果樣本落在了 節點上,那么I=1,否則I=0。

  3. 最后我們得到回歸樹

上述的公式看起來有些復雜,其實就是我們借助 和I把回歸樹的情況表示了出來而已。因為我們訓練模型最終希望得到的其實是模型的參數,對於回歸樹而言,它的參數表示比較復雜,所以看起來可能會有些迷惑。

我們可以簡單一點理解,GBDT就是利用的加法模型訓練多棵回歸樹,預測的結果是這些回歸樹的和。而每一棵回歸樹的訓練目標都是之前模型的殘差。

Shrinkage

Shinkage是一種優化避免GBDT陷入過擬合的方法,這個方法的本質是減小每一次迭代對於殘差的收斂程度,認為每一次逼近少一些多次收斂的效果好於一次逼近很多,逼近次數較少的結果。具體的表現措施就是給我們的每一棵回歸樹的結果乘上一個類似於學習率的參數,通過增大回歸樹的個數來彌補。

說白了就和梯度下降的時候我們乘上學習率是一樣的,只不過在梯度下降的問題當中,我們明確知道不乘學習率的話會陷入震盪無法收斂的問題。而在GBDT當中,Shrinkage的機制並沒有一個明確的證明或者是感性的認識,它的效果更多是基於經驗的。

我們寫一下加上Shrinkage之后的方程來做個對比:

這里的 就是我們的Shrinkage的參數,一般取值在0.001到0.01之間

總結

到這里,關於GBDT模型的基本原理就算是介紹完了。如果你對於之前關於決策樹的相關文章都認真閱讀的話,相信理解GBDT對於你來說應該不是一件困難的事。如果你沒有讀過或者是錯過了之前的文章的話,可以看一下文末的相關閱讀的部分,回顧一下之前的內容。

GBDT最大的創新就在於,將傳統的調整參數來降低梯度的過程轉化成了創建新的樹模型來逼近,我第一次看到的時候深深為之驚艷。和傳統的模型相比,由於GBDT是綜合了多個分類器的結果,所以更加不容易陷入過擬合,並且對於一些復雜的場景的擬合效果會更好。今天我們介紹的只是最基本的回歸問題當中的解法,在分類問題當中,公式會稍稍有些不同,這部分內容我們放在下篇文章當中。

今天的文章到這里就結束了,如果喜歡本文的話,請來一波素質三連,給我一點支持吧(關注、轉發、點贊)。

相關閱讀

機器學習——十大數據挖掘之一的決策樹CART算法

機器學習——打開集成方法的大門,手把手帶你實現AdaBoost模型

GBDT開源代碼: https://github.com/RRdmlearning/Machine-Learning-From-Scratch/tree/master/gradient_boosting_decision_tree


免責聲明!

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



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