機器學習 | 詳解GBDT在分類場景中的應用原理與公式推導


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


今天是機器學習專題的第31篇文章,我們一起繼續來聊聊GBDT模型。

在上一篇文章當中,我們學習了GBDT這個模型在回歸問題當中的原理。GBDT最大的特點就是對於損失函數的降低不是通過調整模型當中已有的參數實現的,若是通過訓練新的CART決策樹來逼近的。也就是說是通過增加參數而不是調整參數來逼近損失函數最低點。

如果對於這部分不是很理解的話,可以通過下方的鏈接回顧一下之前的內容:

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


邏輯回歸損失函數


在我們開始GBDT模型原理的講解和推導之前,我們先來回顧一下邏輯回歸當中的相關公式和概念。

首先,我們先來寫出邏輯回歸的預測函數:

\[h_{\theta}(x) = \frac{1}{1 + e^{-\theta^Tx}} \]

圖像畫出來是這樣的,其中的\(h_{\theta}(x)\)表示表示了模型預測x這個樣本屬於類別1的概率。

在二分類問題當中,只有0和1兩個類別, 兩個類別的概率只和為1。所以我們可以得到\(P(y=0|x;\theta)=1 - h_{\theta}(x)\)

我們希望模型在y=0的時候,使得\(1 - h_{\theta}(x)\)盡量大,否則則使得\(h_{\theta}(x)\)盡量大,我們用指數的形式把兩者綜合寫出了它的損失函數L。

\[l(\theta) = -h_{\theta}(x)^y(1 - h_{\theta}(x))^{1-y} \]

這個值涉及到指數,計算起來不太方便,所以我們會對它求對數進行簡化。等式兩邊都取對數之后,可以得到:

\[L(\theta)=log(l(\theta))=-\sum_{i=1}^N[y_i\log h_{\theta}(x_i)+(1 - y_i)\log (1 - h_{\theta}(x_i))] \]

這個就是邏輯回歸損失函數的由來。


GBDT二分類


我們將GBDT模型應用在二分類的場景當中的原理其實和邏輯回歸一樣,只不過在邏輯回歸當中\(h_{\theta}(x)\)是一個線性函數,而在GBDT當中,\(h_{\theta} = \sum_{m=1}^M f_m(x)\),是一個加法模型

在GBDT的回歸問題當中,\(h_{\theta}\)就是GBDT產出的最后結果,而在二分類問題當中,我們還需要對這個結果加上一個sigmoid函數。我們令上面的\(h_{\theta}\)\(F_M(x)\),所以模型可以表達為:

\[P(y=1|x) = \frac{1}{1 + e^{-F_M(x)}} \]

我們把這個式子帶入邏輯回歸的損失函數當中,可以得到:

\[\begin{aligned} L(x_i, y_i | F_M(x)) &= -y_i\log (\frac{1}{1 + e^{-F_M(x_i)}}) - (1 - y_i)\log (1 - \frac{1}{1 + e^{-F_M(x_i)}} )\\ &= y_i \log(1 + e^{-F_M(x_i)}) + (1 - y_i)[F_M(x_i) + \log (1 + e^{-F_M(x_i)})] \end{aligned} \]

我們對損失函數計算負梯度,也即計算\(L(x, y |F_M(X))\)\(F_M(x)\)的偏導:

\[-\frac{\partial L}{\partial F_M} = y_i - \frac{1}{1 + e^{-F_M(x)}} = y_i - \hat{y_i} \]

這個負梯度也就是我們常說的殘差,這個殘差的結果和我們之前在回歸問題當中的推導結果非常近似。它表示預測概率和真實概率的概率差,這個殘差就是下一棵CART樹的訓練目標。


訓練過程


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

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

  1. 初始化

    首先,我們創建第一棵回歸樹即\(f_1(x)\),在二分類問題當中,它是先驗信息,所以:

    \[f_1(x) = \log \frac{p1}{1-p1}$$,p1表示**樣本中類別1的比例** \]

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

    \[r_{mi}=-[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}]_{f(x) = f_{m-1}(x)}=y_i - \hat{y_i} \]

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

    \[c_{mj}=\mathop{\arg\min}_{c} \ \ \ \sum_{x_i\in R_{mj}}L(y_i, f_{m-1}(x_i) + c) \]

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

    接着,我們更新\(f_m(x) = f_{m-1}(x) + \sum_{j=1}^J c_{mj}I(x \in R_{mj})\),這里的I是一個函數,如果樣本落在了\(R_{mj}\)節點上,那么I=1,否則I=0。

  2. 我們得到

    \[F_M(x) = f_M(x) = \sum_{m=1}^Mf_m(x)=\sum_{m=1}^M\sum_{j=1}^J c_{mj}I(x \in R_{mj}) \]

  3. 某條樣本類別為1的概率為:

    \[P(x_i) = \frac{1}{1 + e^{-F_M(x_i)}} \]


多分類問題


二分類的問題解決了,多分類也並不困難,其實也只是二分類的一個簡單拓展。

我們假設樣本的類別數量是k,那么我們需要k個不同的樹集合來擬合每個類別的概率。我們寫出類別q的概率的公式:

\[P(y=q|x) = \frac{e^{F_q(x)}}{\sum_{i=1}^k e^{F_i(x)}} \]

softmax函數的損失函數為:\(L = -\sum y_i \log(P(y_i | x))\),雖然從公式里看這是一個求和值,但是對於多分類問題來說,只會有一個類別為1,其余均為0,所以只會有一項不為0,我們假設這一項為q。我們代入求出它的負梯度:

\[-\frac{\partial L}{\partial F_q} = y_q - \frac{e^{F_q(x)}}{\sum_{i=1}^k e^{F_i(x)}}= y_q - \hat{y_q} \]

可見在多分類問題當中,這k個樹集合同樣是擬合真實的樣本標簽與預測的概率的差值,本質上和二分類問題是一樣的。


總結


到這里,關於GBDT在分類場景當中的原理我們也介紹完了。其實整篇推倒下來,無論是過程和結果都和回歸問題大同小異。只不過由於分類問題用到了sigmoid函數,使得計算偏導以及殘差的過程稍稍復雜了一些,其他並沒有什么本質差別。

從今天的文章當中我們也可以看出來,GBDT模型適用的范圍很廣,回歸、二分類以及多分類問題都可以適用,是一個非常強大的模型。也正因此,它在深度學習興起之前一度非常流行,基於它也衍生出了許多的改進的版本和應用。比如XGboost,GBDT + LR等等。也因此在面試的時候經常會問到其中的問題,如果有准備面試的同學,建議一定要將原理吃透哦。

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


免責聲明!

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



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