xgboost
简介
- xgboost是Gradient Boosting的一种高效系统实现
基学习器
- tree(gbtree),也可用线性分类器(gblinear)。GBDT则特指梯度提升决策树算法
loss
xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数
xgboost工具支持自定义代价函数
代价函数里加入了正则项
- 树的叶子节点个数
- 每个叶子节点上输出的score的L2模的平方和
- 正则项降低了模型的variance
Shrinkage(xgboost中的eta)
- xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。
- 一般把eta设置得小一点,然后迭代次数设置得大一点
gamma
- 当增益大于阈值时才让节点分裂,gamma即阈值
- 它是正则项里叶子节点数T的系数,所以xgboost在优化目标函数的同时相当于做了预剪枝。
lambda
- 正则项里leaf score的L2模平方的系数,对leaf score做了平滑,也起到了防止过拟合的作用,这个是传统GBDT里不具备的特性。
样本
- 缺失值
- 对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向
- 列抽样
- xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算
计算
在特征粒度上
最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点)
预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构
在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
可并行的近似直方图算法
- 用贪心法枚举所有可能的分割点,当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低
reference
mind:
本文作者:
yuqing wang
本文链接: https://satyrswang.github.io/2021/03/11/xgboost/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://satyrswang.github.io/2021/03/11/xgboost/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!