上一次我們一起學(xué)習(xí)了 GBDT 算法的回歸部分蔬顾,今天我們繼續(xù)學(xué)習(xí)該算法的分類部分熬芜。使用 GBDT 來解決分類問題和解決回歸問題的本質(zhì)是一樣的浦楣,都是通過不斷構(gòu)建決策樹的方式读处,使預(yù)測(cè)結(jié)果一步步的接近目標(biāo)值辨图。
因?yàn)槭欠诸悊栴}漱抓,所以分類 GBDT 和回歸 GBDT 的 Loss 函數(shù)是不同的扒接,具體原因我們?cè)凇?a target="_blank">深入理解邏輯回歸》 一文中有分析過崩瓤,下面我們來看下分類 GBDT 的 Loss 函數(shù)袍啡。
Loss 函數(shù)
和邏輯回歸一樣,分類 GBDT 的 Loss 函數(shù)采用的也是 Log Likelihood:
其中却桶,n 表示有 n 條樣本境输, 為第 i 條樣本的觀察值(或目標(biāo)值),該值要么是 0颖系,要么是 1嗅剖; 為模型對(duì)第 i 個(gè)樣本的預(yù)測(cè)值,它是一個(gè)取值范圍為 [0,1] 之間的概率嘁扼,現(xiàn)在我們來看下該 Loss 是否可導(dǎo)信粮,只用看"求和符號(hào) " 里面的部分是否可導(dǎo)即可,如下:
把上面式子中的 p 用 log(odds) 來表示趁啸,即用 來替換 强缘,用 來替換 (對(duì) log(odds) 不熟悉的同學(xué),可以先閱讀深入理解邏輯回歸一文)不傅,如下:
我們?cè)賹?duì)其求導(dǎo):
右邊的 正好又是 旅掂,所以 又等于 ,注意访娶,這兩種形式后面都會(huì)用到商虐。可見,這個(gè) loss 函數(shù)是可導(dǎo)的称龙,該分類算法可以用梯度下降來求解留拾。
構(gòu)建分類 GBDT 的步驟依然是下面兩個(gè):
- 初始化 GBDT
- 循環(huán)生成決策樹
下面我們來一一說明:
初始化 GBDT
和回歸問題一樣,分類 GBDT 的初始狀態(tài)也只有一個(gè)葉子節(jié)點(diǎn)鲫尊,該節(jié)點(diǎn)為所有樣本的初始預(yù)測(cè)值痴柔,如下:
上式中,F(xiàn) 代表 GBDT 模型疫向, 為模型的初始狀態(tài)咳蔚,該式子意為:找到一個(gè) ,使所有樣本的 Loss 最小搔驼,在這里及下文中谈火, 都表示節(jié)點(diǎn)的輸出,且它是一個(gè) log(odds) 形式的值舌涨,在初始狀態(tài)糯耍, 又是 。
我們還是用一個(gè)最簡(jiǎn)單的例子來說明該步驟囊嘉,假設(shè)我們有以下 3 條樣本:
喜歡爆米花 | 年齡 | 顏色偏好 | 喜歡看電影 |
---|---|---|---|
Yes | 12 | Blue | Yes |
No | 87 | Green | Yes |
No | 44 | Blue | No |
我們希望構(gòu)建 GBDT 分類樹温技,它能通過「喜歡爆米花」、「年齡」和「顏色偏好」這 3 個(gè)特征來預(yù)測(cè)某一個(gè)樣本是否喜歡看電影扭粱,因?yàn)槭侵挥?3 個(gè)樣本的極簡(jiǎn)數(shù)據(jù)集舵鳞,所以我們的決策樹都是只有 1 個(gè)根節(jié)點(diǎn)、2 個(gè)葉子節(jié)點(diǎn)的樹樁(Stump)琢蛤,但在實(shí)際應(yīng)用中蜓堕,決策樹的葉子節(jié)點(diǎn)一般為 8-32 個(gè)。
我們把數(shù)據(jù)代入上面的公式中求 Loss:
為了使其最小博其,我們對(duì)它求導(dǎo)套才,并令結(jié)果等于 0:
于是初始值 ,贺奠,模型的初始狀態(tài) 為 0.69霜旧。
說了一大堆,實(shí)際上你卻可以很容易的算出該模型的初始值儡率,它就是正樣本數(shù)比上負(fù)樣本數(shù)的 log 值,例子中以清,正樣本數(shù)為 2 個(gè)儿普,負(fù)樣本為 1 個(gè),那么:
循環(huán)生成決策樹
和回歸 GBDT 一樣掷倔,分類 GBDT 第二步也可以分成四個(gè)子步驟:(A)眉孩、(B)、(C)、(D)浪汪,我們把它寫成偽代碼:
for m = 1 to M:
(A)
(B)
(C)
(D)
其中 m 表示第 m 棵樹巴柿,M 為樹的個(gè)數(shù)上限,我們先來看 (A):
(A):計(jì)算
此處為使用 m-1 棵樹的模型死遭,計(jì)算每個(gè)樣本的殘差 广恢,這里的偏微分實(shí)際上就是求每個(gè)樣本的梯度,因?yàn)樘荻任覀円呀?jīng)計(jì)算過了呀潭,即 钉迷,那么 ,于是我們的例子中钠署,每個(gè)樣本的殘差如下:
樣本 i | 喜歡看電影 | 第1棵樹的殘差 |
---|---|---|
1 | Yes | 1-0.67=0.33 |
2 | Yes | 1-0.67=0.33 |
3 | No | 0-0.67=-0.67 |
這樣糠聪,第 (A) 小步就完成了。
(B):使用回歸樹來擬合 谐鼎,回歸樹的構(gòu)建過程可以參照《CART 回歸決策樹》一文舰蟆。我們產(chǎn)生的第 2 棵決策樹(此時(shí) m=1)如下:
(C):對(duì)每個(gè)葉子節(jié)點(diǎn) j,計(jì)算
意思是狸棍,在剛構(gòu)建的樹 m 中夭苗,找到每個(gè)節(jié)點(diǎn) j 的輸出 ,能使該節(jié)點(diǎn)的 Loss 最小隔缀。
左邊節(jié)點(diǎn)對(duì)應(yīng)第 1 個(gè)樣本题造,我們把它帶入到上式得:
對(duì)上式直接求導(dǎo)較為復(fù)雜,這里的技巧是先使用二階泰勒公式來近似表示該式猾瘸,再求導(dǎo):把 作為變量界赔,其余項(xiàng)作為常量的二階泰勒展開式如下:
這時(shí)再求導(dǎo)就簡(jiǎn)單了:
Loss 最小時(shí),上式等于 0牵触,于是我們可以求出
可以看出淮悼,上式的分子就是殘差 r,下面我們算一下分母揽思,即 Loss 函數(shù)的二階微分:
我們知道袜腥, 就是 p,而 是 1-p钉汗,所以 羹令,那么該節(jié)點(diǎn)的輸出就是
接著我們來計(jì)算右邊節(jié)點(diǎn)的輸出,它包含樣本 2 和樣本 3损痰,同樣使用二階泰勒公式展開:
對(duì)上式求導(dǎo)福侈,令其結(jié)果為 0,可以計(jì)算 為
這樣卢未,(C) 步驟即完成了肪凛⊙吆海可以看出,對(duì)任意葉子節(jié)點(diǎn)伟墙,我們可以直接計(jì)算其輸出值:
(D):更新模型
仔細(xì)觀察該式翘鸭,實(shí)際上它就是梯度下降——「加上殘差」和「減去梯度」這兩個(gè)操作是等價(jià)的,這里設(shè)學(xué)習(xí)率 為 0.1戳葵,則 3 個(gè)樣本更新如下:
樣本 | 喜歡看電影 | ||
---|---|---|---|
1 | Yes | 0.69 | 0.69+0.1×(1.49)=0.84 |
2 | Yes | 0.69 | 0.69+0.1×(-0.77)=0.61 |
3 | No | 0.69 | 0.61+0.1×(-0.77)=0.61 |
可見就乓,樣本 1 和樣本 3 都離正確的方向更進(jìn)了一步,雖然樣本 2 更遠(yuǎn)了譬淳,但我們可以造更多的樹來彌補(bǔ)該差距档址。
最終,循環(huán) M 次后邻梆,或總殘差低于預(yù)設(shè)的閾值時(shí)守伸,我們的分類 GBDT 建模便完成了。
總結(jié)
本文主要介紹了分類 GBDT 的原理浦妄,具體有以下 2 個(gè)方面:
- 分類 GBDT 的 Loss 函數(shù)
- 構(gòu)建分類 GBDT 的詳細(xì)步驟
本文的公式比較多尼摹,但稍加耐心,你會(huì)發(fā)現(xiàn)它其實(shí)并不復(fù)雜剂娄。
參考:
相關(guān)文章: