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

AdaBoost:提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注,于是,分类问题就被一系列的弱分类器“分而治之”。至于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率较大的弱分类器的权值,使其在表决中起较小的作用。

GBDT和其它Boosting算法一样,通过将表现一般的数个模型(通常是深度固定的决策树)组合在一起来集成一个表现较好的模型。抽象地说,模型的训练过程是对一任意可导目标函数的优化过程。通过反复地选择一个指向负梯度方向的函数,该算法可被看做在函数空间里对目标函数进行优化。因此可以说Gradient Boosting = Gradient Descent + Boosting。

AdaBoost V.S. GBDT

和AdaBoost一样,Gradient Boosting也是重复选择一个表现一般的模型并且每次基于先前模型的表现进行调整。不同的是,AdaBoost是通过提升错分数据点的权重来定位模型的不足而Gradient Boosting是通过算梯度(gradient)来定位模型的不足。因此相比AdaBoost, Gradient Boosting可以使用更多种类的目标函数,而当目标函数是均方误差时,计算损失函数的负梯度值在当前模型的值即为残差。

GBDT V.S. LR(Linear Regression? Logistic Regression?)
从决策边界来说,线性回归的决策边界是一条直线,逻辑回归的决策边界是一条曲线,而GBDT的决策边界可能是很多条线。

GBDT并不一定总是好于线性回归或逻辑回归。根据没有免费的午餐原则,没有一个算法是在所有问题上都能好于另一个算法的。根据奥卡姆剃刀原则,如果GBDT和线性回归或逻辑回归在某个问题上表现接近,那么我们应该选择相对比较简单的线性回归或逻辑回归。具体选择哪一个算法还是要根据实际问题来决定。

以上部分转载自https://www.zhihu.com/question/54626685?from=profile_question_card

adaboost一般用于分类,gbt一般用于回归

机器学习算法中GBDT和XGBOOST的区别有哪些?

  • 基分类器的选择:传统GBDT以CART作为基分类器,XGBoost还支持线性分类器,这个时候XGBoost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。

  • 二阶泰勒展开:传统GBDT在优化时只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,XGBoost工具支持自定义损失函数,只要函数可一阶和二阶求导。

  • 方差-方差权衡:XGBoost在目标函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数TT、每个叶子节点上输出分数的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是XGBoost优于传统GBDT的一个特性。

  • Shrinkage(缩减):相当于学习速率(xgboost中的ϵϵ)。XGBoost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)

  • 列抽样(column subsampling):XGBoost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是XGBoost异于传统GBDT的一个特性。
  • 缺失值处理:XGBoost考虑了训练数据为稀疏值的情况,可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率,paper提到50倍。即对于特征的值有缺失的样本,XGBoost可以自动学习出它的分裂方向。
  • XGBoost工具支持并行:Boosting不是一种串行的结构吗?怎么并行的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第tt次迭代的损失函数里包含了前面t−1t−1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block(块)结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
  • 线程缓冲区存储:按照特征列方式存储能优化寻找最佳的分割点,但是当以行计算梯度数据时会导致内存的不连续访问,严重时会导致cache miss,降低算法效率。paper中提到,可先将数据收集到线程内部的buffer(缓冲区),主要是结合多线程、数据压缩、分片的方法,然后再计算,提高算法的效率。
  • 可并行的近似直方图算法:树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。大致的思想是根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。

adaboost和GBDT的区别以及xgboost和GBDT的区别相关推荐

  1. 随机森林RF、XGBoost、GBDT和LightGBM的原理和区别

    随机森林RF.XGBoost.GBDT和LightGBM的原理和区别 https://www.cnblogs.com/hugechuanqi/p/10554156.html

  2. 基于集成学习方法Random Forest、Adaboost、GBDT、LightGBM、XGBoost的调参、建模、评估实现kaggle竞赛员工离职案例分析(2)

    基于集成学习方法Random Forest.Adaboost.GBDT.LightGBM.XGBoost的调参.建模.评估实现kaggle竞赛员工离职案例分析(2) 引言 3. adaboost模型分 ...

  3. XGBoost与GBDT比较

    XGBoost与GBDT有什么不同 除了算法上与传统的GBDT有一些不同外,XGBoost还在工程实现上做了大量的优化.总的来说,两者之间的区别和联系可以总结成以下几个方面. GBDT是机器学习算法, ...

  4. xgboost 和 gbdt的对比

    xgboost 是gbdt的具体实现方案之一 1.gbdt的损失函数: 1.1 回归损失函数: 均方损失函数.绝对值损失函数.huber损失函数(是均方损失函数 和 绝对值损失函数的折中).分位数损失 ...

  5. C++中结构体与类的区别(struct与class的区别)

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能! struct能继承吗? 能!! s ...

  6. java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别

    java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别 参考文章: (1)java ...

  7. 问题小结(二)——maven的核心功能、面向对象编程和面向接口编程的区别、抽象类和接口的区别等

    文章目录 1. Java创建对象有哪四种方式? 2. 什么是maven?maven的核心功能有哪些? 3. 什么是MVC?说说分层的好处. 4. Spring的两大核心技术是什么? 5. 什么是IOC ...

  8. [html] title与h1的区别、b与strong的区别、i与em的区别?

    [html] title与h1的区别.b与strong的区别.i与em的区别? title 是 网页标题标签 h1 是文本标签 默认与word的h1相似为最大的标题显示 b 为文本加粗标签 与word ...

  9. JavaScript中Element与Node的区别,children与childNodes的区别

    关于Element跟Node的区别,cilldren跟childNodes的区别很多朋友弄不清楚,本文试图让大家明白这几个概念之间的区别. Node(节点)是DOM层次结构中的任何类型的对象的通用名称 ...

最新文章

  1. cmd find 命令 多个 或者 关系 +windows_Chocolatey -Windows系统的yum||apt 软件安装工具...
  2. android+p+华为手机,给1.9亿用户32款老机型进行安卓P升级 华为值吗?
  3. mysql合并表快速去重_MySQL数据表合并去重的简单实现方法
  4. 如何使 React 中的 useEffect、useLayoutEffect 只调用一次
  5. 基于RBF简单的matlab手写识别
  6. 区块链开发公司谈区块链在商业上的应用
  7. 2018年最佳深度学习书单
  8. 定时任务@Scheduled(cron = “* * * * * *?“) 表达式详解
  9. 21天Jmeter打卡day16参数传递token传递,接口关联
  10. matlab2c使用c++实现matlab函数系列教程-randn函数
  11. CentOS 6.8 编译安装MySQL5.5.32
  12. Android学习之ExpandableListView
  13. html canvas缩放抗锯齿,Html5 canvas drawImage:如何应用抗锯齿
  14. 微信公众号第三方平台开发PYTHON教程 PART 5
  15. python计算标准差函数_Python pandas,pandas常用统计方法,求和sum,均值mean,最大值max,中位数median,标准差std...
  16. linux 时间设置的坑,linux 配置定时任务crontab碰到的坑sendmail
  17. Xss小游戏通关攻略带解释
  18. 杰理之探测芯片最高稳定运行频率【篇】
  19. Java 根据多边形坐标点 计算多边形面积
  20. myeclipse自定义注释快捷键

热门文章

  1. Feign使用Hystrix无效原因及解决方法
  2. Java Streams,第 1 部分: java.util.stream 库简介
  3. 怎么切换用户_走进通信:4G手机跟基站是怎么“交流”的
  4. python核心编程第二版pdf_Python Book电子书pdf版合集 Python核心高级编程第二版
  5. 计算机端口封闭,如何查询局域网内被封的电脑端口?
  6. 黑龙江省:2025年将建成5G基站11.4万个,15万数据中心机架
  7. 探讨磷酸铁锂电池在UPS的应用
  8. 新基建将引发全国用电量暴涨近两成,如何应对
  9. html pre设置宽度,求救!html语言中pre宽度的设置属性!
  10. 后处理编辑修改_NX后处理打开报错处理方法