一、模型训练过程

贪心优化算法。多颗决策树串行训练,第一棵树拟合训练目标、第二颗树拟合前面的残差、第三棵树拟合前两棵树留下的残差。

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原理(无推导就轻易理解)相关推荐

  1. 集成学习——XGBoost原理理解

    XGBoost全称为Extreme Gradient Boosting,它是2016年陈天奇和Carlos Guestrin在国际AI顶会ACM SIGKDD(知识发现与数据挖掘会议)上的正式发布,论 ...

  2. XGBoost原理及目标函数推导详解

    前言 XGBoost(eXtreme Gradient Boosting)全名叫极端梯度提升,XGBoost是集成学习方法的王牌,在Kaggle及工业界都有广泛的应用并取得了较好的成绩,本文较详细的介 ...

  3. xgboost原理及应用

    1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT地址和xgboost导读和实战 地址,希望对xgboost原理进行深入理解. 2.xgboos ...

  4. (二)提升树模型:Xgboost原理与实践

    本篇博客是提升树模型博客的第二篇文章,第一篇介绍GBDT的博客可以参看这里.第三篇介绍Lightgbm博客可以参看这里. 本篇博客是基于kingsam_的博客整理而来,在此表示感谢.在这篇文章的基础上 ...

  5. xgboost原理分析以及实践

    摘要 本文在写完GBDT的三篇文章后本来就想写的,但一直没有时间,终于刚好碰上需要,有空来写这篇关于xgboost原理以及一些实践的东西(这里实践不是指给出代码然后跑结果,而是我们来手动算一算整个xg ...

  6. XGBoost 原理介绍

    1.简介 XGBoost的全称是eXtreme Gradient Boosting,它是经过优化的分布式梯度提升库,旨在高效.灵活且可移植.XGBoost是大规模并行boosting tree的工具, ...

  7. XGBoost 原理

    1. XGBoost 原理¶ XGBoost 是对梯度提升算法的改进: 求解损失函数极值时使用泰勒二阶展开 另外在损失函数中加入了正则化项 XGB 自创一个树节点分裂指标.这个分裂指标就是从损失函数推 ...

  8. XGBoost原理简介

    一.简述 这里先简单介绍下RF(Random Forest).GBDT(Gradient Boosting Decision Tree)和XGBoost算法的原理.        RF:从M个训练样本 ...

  9. Xgboost原理介绍,通俗易懂

    初看Xgboost,翻了多篇博客发现关于xgboost原理的描述实在难以忍受,缺乏逻辑性,写一篇供讨论. --以下是抛砖引玉.  观其大略,而后深入细节,一开始扎进公式反正我是觉得效率不高,还容易打消 ...

最新文章

  1. 用命令行查看局域网的其他在线的ip
  2. bulk_create 批量插入数据
  3. 表单提交对chrome记住密码的影响
  4. 如何画出几种常见二分类损失函数(附代码)
  5. MySql 中锁的定义
  6. Another way to define Angular controller
  7. Flink CusWaterMark
  8. 反射--获取当前子类父类的泛型类型
  9. RUNTIME_CLASS
  10. linux后台执行shell脚本
  11. 认识与使用计算机 答案,计算机学习感悟—对计算机的认知和理解
  12. 加入域报错(找不到网络路径)
  13. mantis修改mysql端口_mantis配置邮件服务-465端口
  14. 金融科技方便生活,分布式架构助力微粒贷“闪电放款”
  15. Gitea 的简单介绍
  16. 三年打造AI芯片黑科技,IBM“狩猎女神之矛”将撬动企业混合云
  17. Python带_的变量或函数命名,带下划线的方法
  18. 公务员考试行测资料分析技巧
  19. 2 shell 锂基脂_昭和Shell Nerita HV高速轴承润滑脂
  20. 吴恩达出任Woebot董事长,再度出手医疗领域帮人们治疗抑郁症

热门文章

  1. LeetCode——1849. 将字符串拆分为递减的连续值(Splitting a String Into Descending Consecutive Val..)[中等]——分析及代码(Java)
  2. 经验分布函数无偏性的证明和方差的推导
  3. “剑指Offer”数据结构篇:java实现
  4. 最小费用最大流 【模板】
  5. Linux系统调用(syscall)原理(转载)
  6. Oracle 报错 28000原因和解决方法
  7. UIToolkit下一代UI系统
  8. PTA-C理论B类题库6-3使用函数求最大公约数(辗转相除法的实现)
  9. VS2015 C++/CLR
  10. AD域账号日常维护常用操作