GBDT家族总结(1)
-
GBDT (Gradient Boosting Decision Tree)
GBDT 一个直观的idea就是使用树的形式来实现一个梯度逼近的过程,使得我们的函数损失最小。它是一个集成的模型,是n个CART线性相加的结果
梯度提升算法:
步骤二中,计算残差,简化形式就是
举个形象的例子,GBDT的学习过程就是:
A 的年龄为18岁,I树预测结果是12岁,则残差是6,在II树中A的年龄设成5去学习,若II树种6成了一个叶子节点吗,则A的真实年龄就是两个数结果累加,若II树结论是5岁,则在III树中将A 设成1岁,继续学习。
详细推导可以看: https://zhuanlan.zhihu.com/p/29765582
-
XGBOOST
XGBOOST更加有效的应用的数值优化,损失函数引入了一阶导数和二阶导数,跳过推导,推导可见:https://zhuanlan.zhihu.com/p/92837676
XGBOOST调参:
参数类别有:
- 通用参数:默认值就好
- 学习目标参数: 与任务有关,定下后通常无需再调
- boost参数:弱学习器相关参数,需要仔细调整
常用的几个参数:
通用参数
booster:弱学习器类型,可选tree或者gblinear,默认数模型slient:是否静默,1:不输出任何信息,0:输出中间信息n_thread:线程数,-1 使用系统所有CPU核学习目标参数
objective:损失函数 ,分类/回归/排序eval_metric:评估函数seed:随机数种子booster参数
colsample_bytree ,colsample_bylevel:两种下采样的方式,默认是1,采用所有样本,随机下采样比全部会还一点,建议0.3-0.8max_depth: 树的最大深度。-
max_depth越大,模型越复杂,会学到更局部的样本 - 需使用交叉验证进行调优,默认是6,建议3-10
min_child_weight: 孩子节点样本权重和的最小值,如果一个叶子节点的样本权重和小于min_child_weight则分裂过程结束tricks:
-
n_estimaters和learning_rate: 固定n_estimaters为100,然后调整learning_rate -
树的
max_depth:从6开始,逐步增大 -
min_child_weight: -
列采样: 在0.3到0.5之间进行网格搜索
-
行采样:1
-
gamma固定为0
(未完待续…)