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,∞]