GBDT
GBDT,梯度提升決策樹,是一種以決策樹爲base learner的集成方法,以串行的方式,不斷的學習新的base learner,每次都朝目標前進一些,形成一系列base learner,最終由這一系列base learner進行線性組合得到最終的ensemble learner,表示如下:
,其中表示第t輪迭代的base learner,表示第t輪迭代的ensemble learner。
設損失函數爲L,使用梯度下降法來更新F,有,其中爲學習率或步長
可以看到第t輪迭代的base learner與(loss對之前的ensemble learner的)梯度成線性關係,所以這也是GBDT中gradient boosting部分的由來。
在GBDT中,base learner是用樹模型來表示的,構造一棵決策樹去逼近一階梯度,
其中T表示決策樹的葉子節點數目,葉子節點的取值等於屬於該葉子節點的樣本的一階梯度的平均;
然後line search步長,,即可以使得當前迭代的loss最小的值便是;
得到第t輪迭代的base learner ;更新模型 。
XGB
xgb是GBDT框架的一種實現,還有其它的如lightGBM、catboost也是GBDT的一種。xgb的主要特點是使用了二階泰勒展開式對loss進行了近似,使得整個求解框架可以適用於任意二階可導的loss;具體如下:
,
往loss中添加正則,,其中第一部分約束葉子節點數量T,第二部分約束各葉子節點的取值,改寫loss,
其中分佈表示屬於葉子節點i的樣本的一階梯度和、二階梯度和
令L對的導數爲0,可得
,相對於使用二階的牛頓法進行優化、而非GBDT中的一階梯度下降法,其中相當於對進行了平滑
,表示葉子節點i上的loss,
分裂節點i帶來的增益爲分裂前的loss-(分裂後兩個新節點的loss和),即,
當增益小於一定閾值的時候可以停止分裂,相當於起了個預剪枝的作用。
由於無法知道樹結構,只能採取貪心,每次選擇一個增益最大的節點進行分裂生長,直至滿足一定條件(深度、葉子數量或增益閾值)。
得到base learner後,一般需要對得到base learner 乘以一個係數,以進行shrinkage:
一方面,由於採用了二階泰勒展開式對loss進行了近似,shrinkage可以減少近似的誤差;
另一方面,由於base learner樹是通過貪心得到的,並非最佳結構,shrinkage相當於對每個base learner進行了降權,且shrinkage後會增多迭代次數、即有更多的base learner,有助於減小過擬合。
另外,xgb還借鑑了隨機森林的思想,支持行、列採樣,採樣可以加快計算速度、有助於減小過擬合。
分裂方法
精準模式:遍歷所有特徵的所有可能的分割點,計算gain值,選取值最大的(feature,value)去分割。
近似模式:對於每個特徵,只考察分位點,減少計算複雜度,即計算在分位點處分割的增益,選擇分裂。
- Global:學習每棵樹前,提出候選切分點
- Local:每次分裂前,重新提出候選切分點
實際上XGB不是簡單地按照樣本個數進行分位,而是以二階梯度值作爲權重(Weighted Quantile Sketch)進行分位,比如:
爲什麼用二階梯度h加權?把目標函數整理成以下形式,可以看出二階梯度h有對loss加權的作用:
缺失值處理
左右兩邊,含有缺失的部分樣本放哪邊帶來的增益更大就放哪邊,即選擇那邊爲默認方向。
樹模型的優缺點
優點
- 節點分裂:天然支持缺失值(訓練得到的分裂默認方向)、對異常值魯棒、具有伸縮不變性(不用歸一化特徵)
- 路徑:相對於進行了特徵組合、具有特徵選擇的作用(經常出現在路徑中的特徵比較重要,基本不出現在路徑中的特徵不怎麼重要)、可解釋性強
缺點
- 通過路徑的方式進行特徵組合的效率太低,不適合處理高維數據、尤其是高維稀疏數據(太稀疏,特徵有效值便太少,得到的分裂值容易不合理)
- 缺乏平滑性(迴歸預測時輸出值只能輸出有限的若干種數值)