【機器學習】xgboost系列丨xgboost原理及公式推導

建樹過程中如何選擇使用哪個特征哪個值來進行分裂? 什么時候停止分裂? 如何計算葉節(jié)點的權(quán)值? 建完了第一棵樹之后如何建第二棵樹? 為防止過擬合,XGB做了哪些改進
樹的集成

,其中
。
為子模型的預測函數(shù),每個
即是一棵樹。
即樹的搜索空間。其中q為每棵樹的結(jié)構(gòu),q將
域中每個樣本對應到唯一的葉節(jié)點上,最終產(chǎn)生T個葉節(jié)點,
則是該葉節(jié)點對應的權(quán)重,w即從節(jié)點到權(quán)重的映射(權(quán)重即葉節(jié)點的值)。每個
對應一個獨立的樹結(jié)構(gòu)q和該樹每個葉節(jié)點的權(quán)重w。(這里樹結(jié)構(gòu)是指每個分裂點和對應的分裂值)。
可以看做一個分段函數(shù),q對應的不同的分段,w對應的為該分段的值,
即分段到值的映射。
,目標函數(shù)為:
,其參數(shù)為一個個的函數(shù)
,因為參數(shù)為函數(shù),所以
無法使用傳統(tǒng)的優(yōu)化方法在歐氏空間中進行優(yōu)化,而是采用了加法模型來進行訓練。
(對應xgboost中參數(shù)base_score,注意并不等于base_score,而是經(jīng)過Sigmoid函數(shù)映射后的值),在此基礎(chǔ)上根據(jù)該預測值與真實y值的損失 ,建立第一棵樹
,之后每次迭代時都是根據(jù)其之前所有樹做出的預測之和與真實y值的損失來建立新樹。也就是每次迭代建樹時用新樹
來優(yōu)化前一個樹的損失 。
為第t棵樹對第i個樣本做出的預測。我們每次添加新樹的時候,要優(yōu)化的目標函數(shù)為上一個樹產(chǎn)生的損失。

為新建的這棵樹做出的預測,
為之前所有的樹預測值之和,
即是新建了當前這棵樹后模型做出的預測值,求其與真實值
之間的損失(注意這里是損失不是殘差,這里的
可以是log_loss, mse等)。
。gbdt對損失函數(shù)的優(yōu)化是直接使用了損失函數(shù)的負梯度,沿著梯度下降的方向來減小損失,其是也就是一階泰勒展開。而xgboost在這里使用了二階泰勒展開,因為包含了損失函數(shù)的二階信息,其優(yōu)化的速度大大加快。
其中的多項式稱為函數(shù)在a處的泰勒展開式,剩余的
是泰勒公式的余項,是
的高階無窮小。?
可以得到二階展開式:

為預測值
和真實值
之間的損失,
為常量,因此
是以預測值
為自變量的函數(shù),當建立新樹給出新的預測
后,相當于在上一次的預測
上增加了一個無窮小量

是常數(shù),
是上次迭代求出的值即這里的
,
為無窮小量
。有了這個對應之后。

,其中
,

為常量,優(yōu)化的是損失函數(shù)的最小值,因此常量值可以從損失函數(shù)中去掉。上式可簡化為:
葉節(jié)點權(quán)重

進行展開,得:
是新建的樹的值,對于每個樣本來說,就是對應的葉節(jié)點的權(quán)重
。定義
為分到葉節(jié)點
的樣本(葉節(jié)點總數(shù)為T,樣本總數(shù)為n)
上的損失:
使
最小,顯然這是個一元二次方程求最小值問題。
的最優(yōu)值:
分裂準則

)在此權(quán)重下對應的的最小損失為每個葉節(jié)點上樣本最小損失之和(將上式中的
代入):
下產(chǎn)生的最優(yōu)損失
可以做為樹結(jié)構(gòu)的評價函數(shù),也就是作為樹分裂時候的評價指標。
為每次分裂時分到左子樹上的樣本,
為每次分裂時分到右子樹上的樣本,有
。則在該次分裂后損失的減小量為:

是使函數(shù)達到解析解的權(quán)重
。
損失函數(shù)計算

:
為預測值,則有:



往期精彩回顧
獲取本站知識星球優(yōu)惠券,復制鏈接直接打開:
https://t.zsxq.com/qFiUFMV
本站qq群704220115。
加入微信群請掃碼:
評論
圖片
表情
