xgboost總結

參考:https://blog.csdn.net/xiu351084315/article/details/89192983

算法原理

xgboost是在gbdt的基礎上做了一些優化。
gbdt是基於CART的集成算法,使用迴歸樹,可以處理分類和迴歸問題,通過每輪樣本訓練的訓練,不斷減小殘差,修正合適的損失函數來構建樹。
xgboost在損失函數中引入了正則項,減少過擬合;將一階導數改爲二階導數;在工程方面的優化,例如支持並行計算,提供計算效率等(參考https://snaildove.github.io/2018/10/02/get-started-XGBoost/#XGBoost-%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1%E7%9A%84%E7%B2%BE%E9%AB%93)

損失函數

損失函數主要爲由1階轉爲2階,具體目的學習完善。

分裂結點算法(參考: https://snaildove.github.io/2018/10/02/get-started-XGBoost/#查找分裂點的近似算法-Approximate-Algorithm)

  1. 查找分裂點的近似算法
  2. 帶全的分爲方案
  3. 稀疏情況下的分裂方法

正則化

其中T是葉子的數量,w是葉子的權重,對葉子節點個數做了懲罰,相當於在訓練過程中做了剪枝。

缺失值處理

對於缺失值數據,one-hot編碼等造成的特徵缺失,使用可以處理稀疏特徵的分裂算法,主要是對稀疏特徵缺失的樣本學習出默認節點分裂方向。
將缺失值的數據默認進入左子樹和右子樹,分別計算增益,選擇增益較大的方向,對特徵下的所有樣本點做同樣的操作,取逆梯度最大值即爲特徵分裂的點。

優缺點

優點是速度塊,最新版支持spark,4000多萬樣本,70個維度,200課樹,訓練時間爲1小時(https://www.zhihu.com/question/41354392)
對特徵進行了分塊並排序,也是比gdbt更快速的一個原因。

sklearn參數

通用參數:
booster 基礎提升器的參數,默認爲gbtree(樹的基本模型),可選gblinear(使用線性函數);dart(樹的基本模型)
silent 默認爲0,設置爲1沒有運行消息。
nthread: 線程數
disable_default_eval_metric 當值>0時,默認的模型評估器失效。
num_pbuffer 默認值,不需要管
num_feature,默認值,不需要管
提升器參數
eta 默認爲0.3,可選[0,1],shrinkage參數,用於更新葉子節點權重時,乘以改係數,避免步長過大。
gamma 損失函數減少量,類似於min_split_loss
max_depth 默認爲6,深度越深,越容易過擬合
…參數太多,詳細看https://snaildove.github.io/2018/10/02/get-started-XGBoost/#%E6%8F%90%E5%8D%87%E5%99%A8%E5%8F%82%E6%95%B0-Booster-parameters

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章