xgboost原理(无推导就轻易理解)
一、模型训练过程
贪心优化算法。多颗决策树串行训练,第一棵树拟合训练目标、第二颗树拟合前面的残差、第三棵树拟合前两棵树留下的残差。
1、残差来源:
(1)第k颗树训练时,行采样+列采样(即仅有部分样本、部分特征进入树中进行训练)进入树,决策树按照最大信息增益原则选择分裂特征、分裂点进行分裂;
(2)最终分裂完成之后,每个叶子节点上的分数由该叶子上的所有样本Y标签分布决定,如某叶子节点上正负样本比例:5:1,则该叶子节点分数为0.2(回归问题时为y均值,二分类时也为y均值/bad_rate);
(3)训练完成后,用前k颗树预测所有样本得到y^,y-y^即为前k颗树留下的残差(即第k+1棵树的训练目标,此处假设学习速率为1)
上图中,落到绿色子节点的样本预测概率【0,49/54,5/54】,即属于第一类的概率为0、第二类的概率为49/54、第二类的概率为5/54
2、学习速率/步长
用来指定每棵树的学习步长,在1.中得到了下一颗树的训练目标(残差),以残差为目标在进行完一次迭代后/每训练完一棵树,会将叶子节点的分数*学习速率,主要是为了削弱每棵树的影响,让后面有更大的学习空间、实现小步迭代的思路。注:默认情况下学习速率0.2
二、模型预测过程
每棵树的预测结果相加得到最终的预测结果
三、目标函数:损失函数 + 正则项
·目标函数:模型训练的优化目标
·损失函数:用来衡量模型的预测效果
(1)对于回归问题,常用的损失函数是MSE
(2)对于分类问题,常用的损失函数是对数损失函数
·正则项:用于控制复杂程度 (alpha为L1正则项参数,lambda为L2正则项参数)
(1)T表示叶子结点的个数,w表示叶子节点的分数向量,γ可以控制叶子结点的个数,λ可以控制叶子节点的分数不会过大,防止过拟合。
(2)叶子节点越多、模型越复杂、w的平方越大
四、XGB与GBDT的区别
1、泰勒二阶展开:GBDT只将目标函数泰勒展开到一阶,而xgboost对代价函数进行了二阶泰勒展开来近似模拟正式的损失函数、方便求解,支持自定义损失函数,只要函数可一阶和二阶求导。
2、加入正则项:xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合。
3、增加自动处理缺失值:
(1) 训练时,若特征m存在空值,当树按照特征m分裂时,先不考虑空值、按照m有值的序列选择最优分裂点进行分裂,然后再分别将空值样本带入左子节点和右子节点,计算两侧信息增益,保留整体信息增益较大的分裂方向,预测时空值样本也按照该方向进行分裂;
(2)训练时特征无空值,预测时空值样本默认分裂到左侧子节点
4、支持并行、多线程:xgboost的并行不是tree粒度的并行,而是在特征粒度上的,各个特征的增益计算就可以开多线程进行。
5、支持列抽样:xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算。
6、传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
五、重要参数
params={'objective':'binary:logistic','eval_metric':'auc','booster': 'gbtree', #树模型'silent': 1, #是否打印'eta':0.3, #学习速率'num_boost_round': 100, #迭代次数'gamma':0, # 节点分裂所需的最先损失下降(惩罚项)'max_depth': 6, #树分裂最大深度,'min_child_weight' :100, #最小叶子节点样本权重和,调大减小过拟合,过高会欠拟合'subsample' : 1, #行采样'colsample_bytree' : 1, #列采样,单颗树进行列采样'colsample_bylevel' : 1, #列采样,子树的每层进行列采样'seed': 0, #随机种子,固定行、列采样'lambda':1, #权重的L1正则化项 'alpha': 0, #权重的L2正则化项'scale_pos_weight': 1, #调节样本平衡度'max_delta_step': 0, #限制每棵树权重改变的最大步长'nthread':None #最大可用线程数
}
六、过拟合调参
模型的评估审核时一般都会有针对过拟合问题的要求:如要求train、test的auc相差小于0.03或train、test的ks相差小于0.04等;而在一些场景下训练的模型很容易过拟合,train、test的auc、ks相差较大,这种情况下我们不得不调整参数,有必要在损失一些模型精度的情况下来避免过拟合。
调小max_depth (3,6,1)
调大min_child_weight (100,2000,100)
调大gamma (0,10,2)
调大 lambda
eta、num_round 调高eta,降低num_round, eta(0.01,0.2,0.02),num_round(50,1000,100)
调低subsample & colsample_bytree (0.6,1,0.1)
xgboost原理(无推导就轻易理解)相关推荐
- 集成学习——XGBoost原理理解
XGBoost全称为Extreme Gradient Boosting,它是2016年陈天奇和Carlos Guestrin在国际AI顶会ACM SIGKDD(知识发现与数据挖掘会议)上的正式发布,论 ...
- XGBoost原理及目标函数推导详解
前言 XGBoost(eXtreme Gradient Boosting)全名叫极端梯度提升,XGBoost是集成学习方法的王牌,在Kaggle及工业界都有广泛的应用并取得了较好的成绩,本文较详细的介 ...
- xgboost原理及应用
1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT地址和xgboost导读和实战 地址,希望对xgboost原理进行深入理解. 2.xgboos ...
- (二)提升树模型:Xgboost原理与实践
本篇博客是提升树模型博客的第二篇文章,第一篇介绍GBDT的博客可以参看这里.第三篇介绍Lightgbm博客可以参看这里. 本篇博客是基于kingsam_的博客整理而来,在此表示感谢.在这篇文章的基础上 ...
- xgboost原理分析以及实践
摘要 本文在写完GBDT的三篇文章后本来就想写的,但一直没有时间,终于刚好碰上需要,有空来写这篇关于xgboost原理以及一些实践的东西(这里实践不是指给出代码然后跑结果,而是我们来手动算一算整个xg ...
- XGBoost 原理介绍
1.简介 XGBoost的全称是eXtreme Gradient Boosting,它是经过优化的分布式梯度提升库,旨在高效.灵活且可移植.XGBoost是大规模并行boosting tree的工具, ...
- XGBoost 原理
1. XGBoost 原理¶ XGBoost 是对梯度提升算法的改进: 求解损失函数极值时使用泰勒二阶展开 另外在损失函数中加入了正则化项 XGB 自创一个树节点分裂指标.这个分裂指标就是从损失函数推 ...
- XGBoost原理简介
一.简述 这里先简单介绍下RF(Random Forest).GBDT(Gradient Boosting Decision Tree)和XGBoost算法的原理. RF:从M个训练样本 ...
- Xgboost原理介绍,通俗易懂
初看Xgboost,翻了多篇博客发现关于xgboost原理的描述实在难以忍受,缺乏逻辑性,写一篇供讨论. --以下是抛砖引玉. 观其大略,而后深入细节,一开始扎进公式反正我是觉得效率不高,还容易打消 ...
最新文章
- 用命令行查看局域网的其他在线的ip
- bulk_create 批量插入数据
- 表单提交对chrome记住密码的影响
- 如何画出几种常见二分类损失函数(附代码)
- MySql 中锁的定义
- Another way to define Angular controller
- Flink CusWaterMark
- 反射--获取当前子类父类的泛型类型
- RUNTIME_CLASS
- linux后台执行shell脚本
- 认识与使用计算机 答案,计算机学习感悟—对计算机的认知和理解
- 加入域报错(找不到网络路径)
- mantis修改mysql端口_mantis配置邮件服务-465端口
- 金融科技方便生活,分布式架构助力微粒贷“闪电放款”
- Gitea 的简单介绍
- 三年打造AI芯片黑科技,IBM“狩猎女神之矛”将撬动企业混合云
- Python带_的变量或函数命名,带下划线的方法
- 公务员考试行测资料分析技巧
- 2 shell 锂基脂_昭和Shell Nerita HV高速轴承润滑脂
- 吴恩达出任Woebot董事长,再度出手医疗领域帮人们治疗抑郁症
热门文章
- LeetCode——1849. 将字符串拆分为递减的连续值(Splitting a String Into Descending Consecutive Val..)[中等]——分析及代码(Java)
- 经验分布函数无偏性的证明和方差的推导
- “剑指Offer”数据结构篇:java实现
- 最小费用最大流 【模板】
- Linux系统调用(syscall)原理(转载)
- Oracle 报错 28000原因和解决方法
- UIToolkit下一代UI系统
- PTA-C理论B类题库6-3使用函数求最大公约数(辗转相除法的实现)
- VS2015 C++/CLR
- AD域账号日常维护常用操作