【机器学习】xgboost系列丨xgboost原理及公式推导
建樹過程中如何選擇使用哪個特征哪個值來進行分裂?
什么時候停止分裂?
如何計算葉節點的權值?
建完了第一棵樹之后如何建第二棵樹?
為防止過擬合,XGB做了哪些改進
樹的集成
本文主要針對xgboost的論文原文中的公式細節做了詳細的推導,對建樹過程進行詳細分析。
對于樣本個數為n特征個數為m的數據集 ,其中。
樹的集成學習方法使用K個增量函數來預測輸出:
為子模型的預測函數,每個即是一棵樹。
函數空間即樹的搜索空間。其中q為每棵樹的結構,q將域中每個樣本對應到唯一的葉節點上,最終產生T個葉節點,則是該葉節點對應的權重,w即從節點到權重的映射(權重即葉節點的值)。每個對應一個獨立的樹結構q和該樹每個葉節點的權重w。(這里樹結構是指每個分裂點和對應的分裂值)??梢钥醋鲆粋€分段函數,q對應的不同的分段,w對應的為該分段的值,即分段到值的映射。
對我們的預測函數,目標函數為:
從公式1中可以看出,對于最終的預測函數,其參數為一個個的函數,因為參數為函數,所以無法使用傳統的優化方法在歐氏空間中進行優化,而是采用了加法模型來進行訓練。
boost的思想是將一系列弱分類器串行的組合起來,在前面的分類器的基礎上迭代的優化新的分類器。
首先我們對所有的數據默認預測一個固定值(對應xgboost中參數base_score,注意并不等于base_score,而是經過Sigmoid函數映射后的值),在此基礎上根據該預測值與真實y值的損失 ,建立第一棵樹,之后每次迭代時都是根據其之前所有樹做出的預測之和與真實y值的損失來建立新樹。也就是每次迭代建樹時用新樹來優化前一個樹的損失 。
為第t棵樹對第i個樣本做出的預測。我們每次添加新樹的時候,要優化的目標函數為上一個樹產生的損失。
因此我們建立第t棵樹時有損失函數:
為新建的這棵樹做出的預測,為之前所有的樹預測值之和,即是新建了當前這棵樹后模型做出的預測值,求其與真實值之間的損失(注意這里是損失不是殘差,這里的可以是log_loss, mse等)。
泰勒展開
gbdt的目標函數與xgboost區別就是帶不帶正則項,也就是上面式子中的。gbdt對損失函數的優化是直接使用了損失函數的負梯度,沿著梯度下降的方向來減小損失,其是也就是一階泰勒展開。而xgboost在這里使用了二階泰勒展開,因為包含了損失函數的二階信息,其優化的速度大大加快。
下面來看一下泰勒展開的推導。首先我們來復習一下泰勒定理:
設n是一個正整數。如果定義在一個包含a的區間上的函數f在a點處n+1次可導,那么對于這個區間上的任意x,則有:其中的多項式稱為函數在a處的泰勒展開式,剩余的是泰勒公式的余項,是的高階無窮小。?
該公式經過變換可以得到二階展開式:
對于式子:
可以這樣分析,為預測值和真實值之間的損失,為常量,因此是以預測值為自變量的函數,當建立新樹給出新的預測后,相當于在上一次的預測上增加了一個無窮小量
令
則有
其中真實標簽是常數,是上次迭代求出的值即這里的,為無窮小量。有了這個對應之后。
因此我們建立第t棵樹時有損失函數:
令損失函數的一階、二階偏導分別為,其中,
式中為常量,優化的是損失函數的最小值,因此常量值可以從損失函數中去掉。上式可簡化為:
葉節點權重
式中正則項進行展開,得:
其中是新建的樹的值,對于每個樣本來說,就是對應的葉節點的權重。定義為分到葉節點的樣本(葉節點總數為T,樣本總數為n)
上式是對本次建樹時n個樣本的損失求和,下面分兩步:先對每個葉節點的樣本損失求和,再對所有葉節點求和,兩者結果一樣。
對于葉節點上的損失:
對于當前的樹結構求使最小,顯然這是個一元二次方程求最小值問題。
可以得到葉節點權重的最優值:
分裂準則
上面是對單個葉節點計算出了最優權重,對于新建的這樹(樹結構)在此權重下對應的的最小損失為每個葉節點上樣本最小損失之和(將上式中的代入):
在樹結構下產生的最優損失可以做為樹結構的評價函數,也就是作為樹分裂時候的評價指標。
令為每次分裂時分到左子樹上的樣本,為每次分裂時分到右子樹上的樣本,有。則在該次分裂后損失的減小量為:
因此將分裂時增益定義為:
我們在建樹的過程(也就是求分段函數的過程)包括兩步:一是選擇分裂依據的特征和特征值(將自變量分段),二是確定葉節點的權重(確定每段對應的函數值)。劃分的依據準則是Gain,其實也就是損失函數的解析解,劃分后葉節點的權重是使函數達到解析解的權重。
從最優化的角度來看:GBDT采用的是數值優化的思維, 用的最速下降法去求解Loss Function的最優解, 其中用CART決策樹去擬合負梯度, 用牛頓法求步長。XGboost用的解析的思維, 對Loss Function展開到二階近似, 求得解析解, 用解析解作為Gain來建立決策樹, 使得Loss Function最優.
除了對目標函數添加正則項外,為了減小過擬合,xgboost還使用了列采樣和縮減方法(Shrinkage,即Learning rate)。
損失函數計算
對于二分類問題常使用負log損失作為損失函數,下面推導一下log loss的一階梯度G和海森矩陣H。:
其中p為預測概率。若為預測值,則有:
因此:
即:
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 獲取本站知識星球優惠券,復制鏈接直接打開: https://t.zsxq.com/qFiUFMV 本站qq群704220115。加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【机器学习】xgboost系列丨xgboost原理及公式推导的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ie浏览器速度提升设置 关闭网页多媒体方
- 下一篇: 腾讯视频下载转mp4_腾讯视频如何上传自