GBDT原理詳解及sklearn源碼解析

以下關于GBM和GBDT的理解來自經典論文[greedy function approximation: a gradient boosting machine]本橙,by Jerome H.Friedman,(https://github.com/LouisScorpio/datamining/tree/master/papers)

論文的整體思路:
1.函數(shù)空間的數(shù)值優(yōu)化
對算法中損失函數(shù)的數(shù)值優(yōu)化不是在參數(shù)空間,而是在函數(shù)空間景馁,數(shù)值優(yōu)化方式為梯度下降肯适;
2.GBM
以加法模型為基礎震肮,使用上述優(yōu)化方法湿刽,構建一套通用梯度提升算法GBM兽泣;
3.不同損失類型的GBM
具體展現(xiàn)使用不同類型的損失時的GBM怀读;
4.GBDT
以CART回歸樹為加法模型的弱分類器诉位,構建算法模型即GBDT。

函數(shù)空間的數(shù)值優(yōu)化

首先菜枷,考慮加法模型苍糠,即最終分類器是由多個弱分類器線性相加的結果,表示為以下形式:
?????F(x;\left \{\beta_{m}, a_{m} \right \}_{1}^{M}) = \sum_{m=1}^{M}\beta _{m}h(x;a_{m}) ?????(1)
其中啤誊,h(x;a)是弱分類器岳瞭,是關于輸入特征x的函數(shù),a是函數(shù)的參數(shù)(如果h(x;a)為回歸樹蚊锹,那么a就是回歸樹中用于分裂的特征瞳筏、特征的分裂點以及樹的葉子節(jié)點的分數(shù)),M是弱分類器的數(shù)量牡昆,\beta為弱分類器的權重(在GBDT中相當于learning_rate姚炕,即起到shrinkage的作用)。

參數(shù)空間的數(shù)值優(yōu)化

假設預測的目標函數(shù)為F(x; P)丢烘,其中P為參數(shù)柱宦,損失為L,那么損失函數(shù)表示為:
????????\Phi (\mathbf{P}) = E_{y,x}L(y,F(\mathbf{x};\mathbf{P}))
對應參數(shù)P的最優(yōu)解表示為:
??????????\mathbf{P} = arg\underset{\mathbf{P}}{min}\Phi (\mathbf{P})
考慮使用梯度下降的優(yōu)化方式播瞳,首先計算損失函數(shù)\Phi (P)對參數(shù)P的梯度\mathbf{g}_{m}:
?????????\mathbf{g}_{m} =\left [ \frac{\partial \Phi (\mathbf{P})}{\partial P} \right ] _{\mathbf{P}=\mathbf{P}_{m-1}}
然后掸刊,對參數(shù)P沿著負梯度方向即-\mathbf{g}_{m}方向更新,更新的步長為:
???????????\mathbf{p}_{m} = -\rho _{m}\mathbf{g}_{m}
其中\rho_{m}是在負梯度方向上更新參數(shù)的最優(yōu)步長赢乓,通過以下方式線性搜索得到:
???????\rho _{m} = arg\underset{\rho}{min}\Phi (\mathbf{P}_{m-1}-\rho\mathbf{g}_{m})
從初始值p_{0}開始忧侧,經過多次這樣的更新迭代之后石窑,參數(shù)P的值最終為:
????????\mathbf{P}_{m} = \sum_{i=0}^{m}\mathbf{p}_{i} = \sum_{i=0}^{m}-\rho_{i}\mathbf{g}_{i}
以上為參數(shù)空間的數(shù)值優(yōu)化。

函數(shù)空間的數(shù)值優(yōu)化

在函數(shù)空間苍柏,假設預測的目標函數(shù)為F(x)尼斧,損失為L,那么損失函數(shù)表示為:
????????\Phi (\mathbf{F(\mathbf{x})}) = E_{y,x}L(y,F(\mathbf{x}))
注意试吁,這里損失函數(shù)的參數(shù)不再是P棺棵,而是函數(shù)F(\mathbf{x})
按照梯度下降的優(yōu)化方式熄捍,這里要計算損失函數(shù)\Phi (F(\mathbf{x}))對函數(shù)F的梯度\mathbf{g}_{m}:
?????\mathbf{g}_{m}(\mathbf{x}) =\left [ \frac{\partial \Phi (\mathbf{F(\mathbf{x})})}{\partial F(\mathbf{x})} \right ] _{\mathbf{F(\mathbf{x})}=\mathbf{F}_{m-1}(\mathbf{x})}
然后對函數(shù)沿著負梯度方向更新烛恤,更新的步長如下:
?????????f_{m}(\mathbf{x}) = -\rho _{m}\mathbf{g}_{m}(\mathbf{x})
其中\rho_{m}是在負梯度方向上更新參數(shù)的最優(yōu)步長,通過以下方式線性搜索得到:
???\rho _{m} = arg\underset{\rho}{min}E_{y,\mathbf{x}}\mathbf{L}(y, \mathbf{F}_{m-1}(\mathbf{x})-\rho g_{m}(\mathbf{x}))
經過多次迭代之后余耽,最終的函數(shù)結果為:
?????????\mathbf{F}_{m}(\mathbf{x}) = \sum_{0}^{m}f_{i}(\mathbf{x})

GBM

考慮(1)中的加法模型形式缚柏,可以得到
??????\mathbf{F}_{m}(\mathbf{x}) = \mathbf{F}_{m-1}(\mathbf{x}) + \beta _{m}h(\mathbf{x};\mathbf{a}_{m})
假設損失為L,那么
?(\beta _{m}, \mathbf{a}_{m}) = arg\underset{\beta ,\mathbf{a}}{min}\sum_{i=1}^{N}\mathbf{L}(y_{i}, \mathbf{F}_{m-1}(\mathbf{x}_{i}) + \beta h(\mathbf{x}_{i};\mathbf{a}))
根據函數(shù)空間的數(shù)值優(yōu)化碟贾,h(\mathbf{x};\mathbf{a})應該對應于負梯度:
????-g_{m}(\mathbf{x}) = -[\frac{\partial \mathbf{L}(y, \mathbf{F}(\mathbf{x}))}{\partial \mathbf{F}(\mathbf{x})}]_{\mathbf{F}(\mathbf{x})=\mathbf{F}_{m-1}(\mathbf{x})}
在模型訓練時币喧,負梯度-g_{m}(\mathbf{x})是基于樣本點進行的估計,為了提高泛化能力袱耽,一種可行的解決辦法是讓h(\mathbf{x};\mathbf{a})去擬合負梯度-g_{m}(\mathbf{x})杀餐,由此得到:
????\mathbf{a}_{m} = arg\underset{\mathbf{a},\beta }{min}\sum_{i=1}^{N}[-g_{m}(\mathbf{x}_{i})-\beta h(\mathbf{x}_{i};\mathbf{a})]^{2}
擬合學習到的h(\mathbf{x};\mathbf{a})作為加法模型的弱學習器。加法模型的步長通過線性搜索的方式得到:
??\rho _{m} = arg \underset{\rho}{min}\sum_{i=1}^{N}\mathbf{L}(y_{i}, \mathbf{F}_{m-1}(\mathbf{x}_{i}) + \rho h(\mathbf{x}_{i};\mathbf{a}_{m}))
綜上朱巨,GBM整個算法流程如下:

  1. 初始化:\mathbf{F}_{0}(\mathbf{x}) = arg \underset{\rho}{min}\sum_{i=1}^{N}\mathbf{L}(y_{i}, \rho)
  2. For m = 1 to M do:
    3.\tilde{y}_{i} = -[\frac{\partial \mathbf{L}(y_{i}, \mathbf{F}(\mathbf{x}_{i}))}{\partial \mathbf{F}(\mathbf{x}_{i})}]_{\mathbf{F}(\mathbf{x})=\mathbf{F}_{m-1}(\mathbf{x})}, i = 1, 2, \cdots , N
    1. \mathbf{a}_{m} = arg\underset{\mathbf{a},\beta }{min}\sum_{i=1}^{N}[\tilde{y}_{i}-\beta h(\mathbf{x}_{i};\mathbf{a})]^{2}
    2. \rho _{m} = arg \underset{\rho}{min}\sum_{i=1}^{N}\mathbf{L}(y_{i}, \mathbf{F}_{m-1}(\mathbf{x}_{i}) + \rho h(\mathbf{x}_{i};\mathbf{a}_{m}))
    3. \mathbf{F}_{m}(\mathbf{x}) = \mathbf{F}_{m-1}(\mathbf{x}) + \beta _{m}h(\mathbf{x};\mathbf{a}_{m})
    4. endFor
      end Algorithm
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末史翘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冀续,更是在濱河造成了極大的恐慌琼讽,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洪唐,死亡現(xiàn)場離奇詭異钻蹬,居然都是意外死亡,警方通過查閱死者的電腦和手機凭需,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門脉让,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人功炮,你說我怎么就攤上這事溅潜。” “怎么了薪伏?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵滚澜,是天一觀的道長。 經常有香客問我嫁怀,道長设捐,這世上最難降的妖魔是什么借浊? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮萝招,結果婚禮上蚂斤,老公的妹妹穿的比我還像新娘。我一直安慰自己槐沼,他們只是感情好曙蒸,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岗钩,像睡著了一般纽窟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兼吓,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天臂港,我揣著相機與錄音,去河邊找鬼视搏。 笑死审孽,一個胖子當著我的面吹牛,可吹牛的內容都是我干的浑娜。 我是一名探鬼主播佑力,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼棚愤!你這毒婦竟也來了搓萧?” 一聲冷哼從身側響起杂数,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宛畦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后揍移,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體次和,經...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年那伐,在試婚紗的時候發(fā)現(xiàn)自己被綠了踏施。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡罕邀,死狀恐怖畅形,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情诉探,我是刑警寧澤日熬,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站肾胯,受9級特大地震影響竖席,放射性物質發(fā)生泄漏耘纱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一毕荐、第九天 我趴在偏房一處隱蔽的房頂上張望束析。 院中可真熱鬧,春花似錦憎亚、人聲如沸员寇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丁恭。三九已至,卻和暖如春斋日,著一層夾襖步出監(jiān)牢的瞬間牲览,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工恶守, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留第献,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓兔港,卻偏偏與公主長得像庸毫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子衫樊,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容