算法原理
XGB(extreme gradient boosting)是GBDT的一種工業(yè)實現(xiàn),也是通過不斷增加新樹,擬合偽殘差去降低損失函數(shù)。其擬合過程是使用的損失函數(shù)的二階泰勒展開,這是和GBDT的一個區(qū)別。
損失函數(shù)
分裂結(jié)點算法
- 精確的貪心法
枚舉,時間開銷大 - 近似的貪心
正則化
葉子節(jié)點數(shù)和葉節(jié)點權(quán)重
對缺失值處理
XGB中允許缺失值存在。在找分裂點時,不遍歷迭代缺失樣本,減少計算,分配樣本時,缺失的樣本同時分到左右子樹,計算哪邊的增益大就自動分到哪邊去。但在測試時如果遇到缺失值,會分到右子樹。
優(yōu)缺點
優(yōu)點(快速高效可容錯)
- 支持線性分類器(相當于引入L1 L2正則懲罰項的LR和線性回歸,目標函數(shù)公式=誤差平方和+正則項,似LR)
- 代價函數(shù)用了二階Talor展開,引入一階導(dǎo)和二階導(dǎo),提高模型擬和的速度(損失函數(shù):一個樣本的誤差;代價函數(shù):整個訓(xùn)練集上所有樣本誤差的平均;目標函數(shù):代價函數(shù) + 正則化項)
- 可以給缺失值自動劃分方向;
- 同RF,支持樣本(行)隨機抽取,也支持特征(列)隨機抽取,降低運算,防過擬合;
- 代價函數(shù)引入正則化項,控制模型(樹)復(fù)雜度,
正則化項包含全部葉子節(jié)點個數(shù),每個葉子節(jié)點得分的L2模的平方和(代表葉子節(jié)點權(quán)重的影響)
從貝葉斯(先驗累積思想)方差角度考慮,正則降低了模型的方差,防過擬和; - 每次迭代后為葉子分配結(jié)合學習速率,減低每棵樹權(quán)重,減少每棵樹影響,靈活調(diào)整后面的學習空間;
- 支持并行,不是樹并行,是把特征值先預(yù)排序,存起來,可以重復(fù)并行使用計算分裂點;
- 分裂依據(jù)分開后與未分前的差值增益,不用每個節(jié)點排序算增益,減少計算量,可以并行計算;
- 可以引入閾值限制樹分裂,控制樹的規(guī)模。
缺點:
- 容易過擬合;
- 調(diào)參困難。
應(yīng)用場景
分類,回歸
sklearn參數(shù)
- learning_rate:學習率
- n_estimators:多少棵樹
- max_depth=5:樹最大深度
- min_child_weight:最小權(quán)重系數(shù)
- gamma=0:懲罰系數(shù)(力度)
- lambda:正則化
- alpha:正則化
- subsample:隨機選樣本的比例
- colsample_bytree:隨機選特征
- objective = 'binary:logistic':損失函數(shù)loss function,求這個函數(shù)的一階二階導(dǎo)
- scale_pos_weight:要不要指定一個均衡的樹
- seed=7 #隨機種子,每次復(fù)現(xiàn)都是一樣的