1. 程式人生 > >xgboost 演算法原理

xgboost 演算法原理

1、xgboost是什麼

全稱:eXtreme Gradient Boosting
作者:陳天奇(華盛頓大學博士)
基礎:GBDT
所屬:boosting迭代型、樹類演算法。
適用範圍:分類、迴歸
優點:速度快、效果好、能處理大規模資料、支援多種語言、支 持自定義損失函式等等。
缺點:釋出時間短(2014),工業領域應用較少,待檢驗

2、基礎知識,GBDT

xgboost是在GBDT的基礎上對boosting演算法進行的改進,內部決策樹使用的是迴歸樹,簡單回顧GBDT如下:
這裡寫圖片描述

迴歸樹的分裂結點對於平方損失函式,擬合的就是殘差;對於一般損失函式(梯度下降),擬合的就是殘差的近似值,分裂結點劃分時列舉所有特徵的值,選取劃分點。
最後預測的結果是每棵樹的預測結果相加。

3、xgboost演算法原理知識

3.1 定義樹的複雜度

這裡寫圖片描述

把樹拆分成結構部分q和葉子權重部分w。
樹的複雜度函式和樣例:
這裡寫圖片描述
定義樹的結構和複雜度的原因很簡單,這樣就可以衡量模型的複雜度了啊,從而可以有效控制過擬合。

3.2 xgboost中的boosting tree模型

這裡寫圖片描述

和傳統的boosting tree模型一樣,xgboost的提升模型也是採用的殘差(或梯度負方向),不同的是分裂結點選取的時候不一定是最小平方損失。
這裡寫圖片描述

3.3 對目標函式的改寫
這裡寫圖片描述

最終的目標函式只依賴於每個資料點的在誤差函式上的一階導數和二階導數。這麼寫的原因很明顯,由於之前的目標函式求最優解的過程中只對平方損失函式時候方便求,對於其他的損失函式變得很複雜,通過二階泰勒展開式的變換,這樣求解其他損失函式變得可行了。很贊!
當定義了分裂候選集合的時候,這裡寫圖片描述

可以進一步改目標函式。分裂結點的候選響集是很關鍵的一步,這是xgboost速度快的保證,怎麼選出來這個集合,後面會介紹。
這裡寫圖片描述

求解:
這裡寫圖片描述

3.4 樹結構的打分函式
Obj代表了當指定一個樹的結構的時候,在目標上面最多減少多少。(structure score)

這裡寫圖片描述

對於每一次嘗試去對已有的葉子加入一個分割
這裡寫圖片描述
這樣就可以在建樹的過程中動態的選擇是否要新增一個結點。
這裡寫圖片描述
假設要列舉所有x < a 這樣的條件,對於某個特定的分割a,要計算a左邊和右邊的導數和。對於所有的a,我們只要做一遍從左到右的掃描就可以枚舉出所有分割的梯度和GL、GR。然後用上面的公式計算每個分割方案的分數就可以了。

3.5 尋找分裂結點的候選集
1、暴力列舉

2、近似方法 ,近似方法通過特徵的分佈,按照百分比確定一組候選分裂點,通過遍歷所有的候選分裂點來找到最佳分裂點。
兩種策略:全域性策略和區域性策略。在全域性策略中,對每一個特徵確定一個全域性的候選分裂點集合,就不再改變;而在區域性策略中,每一次分裂 都要重選一次分裂點。前者需要較大的分裂集合,後者可以小一點。對比補充候選集策略與分裂點數目對模型的影響。 全域性策略需要更細的分裂點才能和區域性策略差不多

3、Weighted Quantile Sketch

這裡寫圖片描述
陳天奇提出並從概率角度證明了一種帶權重的分散式的Quantile Sketch。

4、xgboost的改進點總結

1、目標函式通過二階泰勒展開式做近似
2、定義了樹的複雜度,並應用到目標函式中
3、分裂結點處通過結構打分和分割損失動態生長
4、分裂結點的候選集合通過一種分散式Quantile Sketch得到
5、可以處理稀疏、缺失資料
6、可以通過特徵的列取樣防止過擬合

5、引數

xgboost 有很多可調引數,具有極大的自定義靈活性。比如說:
(1)objective [ default=reg:linear ] 定義學習任務及相應的學習目標,可選的目標函式如下:
“reg:linear” –線性迴歸。
“reg:logistic” –邏輯迴歸。
“binary:logistic” –二分類的邏輯迴歸問題,輸出為概率。
“multi:softmax” –處理多分類問題,同時需要設定引數num_class(類別個數)
(2)’eval_metric’ The choices are listed below,評估指標:
“rmse”: root mean square error
“logloss”: negative log-likelihood
(3)max_depth [default=6] 數的最大深度。預設值為6 ,取值範圍為:[1,∞]

參考:
官方文件:
http://xgboost.readthedocs.io/en/latest/

Github:
https://github.com/dmlc/xgboost

Xgboost論文:
http://cran.fhcrc.org/web/packages/xgboost/vignettes/xgboost.pdf

陳天奇的boosting tree的ppt:
http://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf

Xgboost調參:
http://blog.csdn.net/wzmsltw/article/details/50994481

GBDT資料:
http://www.jianshu.com/p/005a4e6ac775