1、简单介绍XGB

是一种基于boosting增强策略的加法模型,训练的时候采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。XGB对GBDT进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行和默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,但其核心思想没有大的变化。

2、XGB与GBDT的区别

  • 基分类器:XGB的基分类器不仅支持CART决策树,还支持线性分类器。
  • 导数信息:XGB对损失函数做了二阶泰勒展开,GBDT只用了一阶导数信息,并且XGB还支持自定义损失函数,只要损失函数一阶、二阶可导。
  • 正则项:XGB的目标函数加了正则项, 相当于预剪枝,使得学习出来的模型更加不容易过拟合。
  • 列抽样:XGB支持列采样,与随机森林类似,用于防止过拟合。
  • 缺失值处理:对树中的每个非叶子结点,XGB可以自动学习出它的默认分裂方向。如果某个样本该特征值缺失,会将其划入默认分支。
  • 并行化:注意不是tree维度的并行,而是特征维度的并行。XGBt预先将每个特征按特征值排好序,存储为块结构,分裂结点时可以采用多线程并行查找每个特征的最佳分割点,极大提升训练速度。

3、XGBoost为什么使用泰勒二阶展开

  • 精准性:相对于GBDT的一阶泰勒展开,XGB采用二阶泰勒展开,可以更为精准的逼近真实的损失函数
  • 可扩展性:损失函数支持自定义,只需要新的损失函数二阶可导。

4、XGBoost为什么可以并行训练

  • XGB的并行,并不是说每棵树可以并行训练,XGB本质上仍然采用boosting思想,每棵树训练前需要等前面的树训练完成才能开始训练。
  • XGBoost的并行,指的是特征维度的并行。在训练之前,每个特征按特征值对样本进行预排序,并存储为Block结构,在后面查找特征分割点时可以重复使用,而且特征已经被存储为一个个block结构,那么在寻找每个特征的最佳分割点时,可以利用多线程对每个block并行计算。

5、XGBoost为什么快

  • 分块并行:训练前每个特征按特征值进行排序并存储为Block结构,后面查找特征分割点时重复使用,并且支持并行查找每个特征的分割点
  • 候选分位点:每个特征采用常数个分位点作为候选分割点
  • CPU cache 命中优化: 使用缓存预取的方法,对每个线程分配一个连续的buffer,读取每个block中样本的梯度信息并存入连续的Buffer中。
  • Block 处理优化:Block预先放入内存;Block按列进行解压缩;将Block划分到不同硬盘来提高吞吐。

6、XGBoost防止过拟合的方法

XGB在设计时,为了防止过拟合做了很多优化,具体如下:

  • 目标函数添加正则项:叶子节点个数+叶子节点权重的L2正则化
  • 列抽样:训练的时候只用一部分特征(不考虑剩余的block块即可)
  • 子采样:每轮计算可以不使用全部样本,使算法更加保守
  • shrinkage: 可以叫学习率或步长,在XGB 进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。

7、XGBoost如何处理缺失值

XGB模型的一个优点就是允许特征存在缺失值。对缺失值的处理方式如下:

  • 在特征k上寻找最佳分割点时,不会对该列特征缺失的样本进行遍历,而只对该列特征值为无缺失值的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找分割点 的时间开销。
  • 在逻辑实现上,为了保证完备性,会将该特征值缺失的样本分别分配到左叶子结点和右叶子结点,两种情形都计算一遍后,选择分裂后增益最大的那个方向(左分支或是右分支),作为预测时特征值缺失样本的默认分支方向。
  • 如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子结点。

【数据挖掘】XGBoost面试题:与GBDT的区别?为什么使用泰勒二阶展开?为什么可以并行训练?为什么快?防止过拟合的方法?如何处理缺失值?相关推荐

  1. xgboost参数_珍藏版 | 20道XGBoost面试题,你会几个?(下篇)

    XGBoost的威名想必大家都有所耳闻,它不仅是数据科学竞赛神器,在工业界中也被广泛地使用.本文给大家分享珍藏许久的XGBoost高频面试题,希望能够加深大家对XGBoost的理解,更重要的是能够在找 ...

  2. 20道XGBoost面试题

    20道XGBoost面试题 20道XGBoost面试题 XGBoost的威名想必大家都有所耳闻,它不仅是数据科学竞赛神器,在工业界中也被广泛地使用.本文给大家分享珍藏了多年的XGBoost高频面试题, ...

  3. adaboost和GBDT的区别以及xgboost和GBDT的区别

    adaboost和GBDT的区别以及xgboost和GBDT的区别 AdaBoost:提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值.这样一来,那些没有得到正确分类的数据, ...

  4. XGBoost Plotting API以及GBDT组合特征实践

    XGBoost Plotting API以及GBDT组合特征实践 写在前面: 最近在深入学习一些树模型相关知识点,打算整理一下.刚好昨晚看到余音大神在Github上分享了一波 MachineLearn ...

  5. 面试题字符集和编码区别_您和理想工作之间的一件事-编码面试!

    面试题字符集和编码区别 A recruiter calls you for a position with your dream company. You get extremely excited ...

  6. (7)FPGA面试题Latch和Register区别

    1.1 FPGA面试题Latch和Register区别 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题Latch和Register区别: 5)结束语. 1 ...

  7. XGBOOST和LGBM及RF的区别:

    1.xgboost基于一种划分时对数值进行预排序presort,因此不能处理类别型特征,这种方法好处是能够处理精准找到分裂点,但是时间复杂度很高: 而Light GBM基于hist直方图,对于连续性特 ...

  8. [马士兵] 一. 初识JAVA 20. 反编译工具的使用 21. 本章最后一段代码 22. 扩展面试题: JDK, JRE, JVM区别

    20. 反编译工具的使用 编译 源代码----->class 反编译 class---->源代码 反编译工具 jd-gui.exe 21. 本章最后一段代码 public class Hi ...

  9. Xgboost如何处理缺失值

    Xgboost Xgboost简介 Xgboost[1]是由陈天奇提出的一种集成学习方法,要想了解Xgboost,这里建议先了解决策树,再了解GBDT(Gradient boosting descen ...

  10. xgboost与gbdt的区别

    目标函数的区别:如图所示(来自于xgboost论文): 从这里来看传统的gbdt是xgboost中的一种特例, 正则化参数为0: 正则化中的T代表叶子的数量,w代表叶子中的结果,即预测值(得分值) , ...

最新文章

  1. windows server 2003 域控制器重命名
  2. windows查看已连接过的wifi密码
  3. 系统分析的几个好工具
  4. 那些决定模型上限的操作
  5. 一位软件实施工程师的自述
  6. Revit API创建标高,单位转换
  7. mybatis-嵌套(关联)查询/ N+1 / 延迟加载
  8. 教你十分钟快速搭建springBoot项目实战
  9. P2386 放苹果 方法一
  10. 故障分析:从Oracle数据库故障到Linux nproc算法
  11. 使用抓包工具fiddler和apipost进行接口测试
  12. 【SAS BASE】PROC FREQ
  13. OLED 12864屏幕指南
  14. 【电脑主板维修】主板故障检测要领
  15. 计算机视频解码测试,无底限测试 入门电脑挑战H.265视频解码
  16. 常见不透明度16进制转换
  17. 基于Android的记账APP论文,基于Android平台的手机记账系统的设计与实现
  18. linux开启telnet服务(总结)
  19. [bzoj4735] 你的生命已如风中残烛
  20. [Matlab]切比雪夫Ⅰ型滤波器设计:低通、高通、带通和带阻(2)

热门文章

  1. revit 转换ifc_将IFC转换成GLTF格式
  2. php两个问号??表示什么意思
  3. FusionStorage原理及组件,Java面试回忆录
  4. php publish,Laravel执行php artisan vendor:publish卡住问题解决方法
  5. mysql基于PHP下的大学生校园交流论坛的设计与实现 毕业设计源码101634
  6. 为什么使用VO,DTO,BO
  7. Mysql设计层优化整理总结
  8. iphone编程资源站
  9. 720不能建立远程计算机连接,宽带连接错误720:不能建立到远程计算机的连接 正确解决方法...
  10. 站桩是为了理气,气顺了,人自然就不会生病