GBDT与Xgboost的区别

  • N问GBDT
    • 1. 怎么设置单棵树的停止生长条件?
    • 2. 如何评估特征的权重大小?
    • 3. 当增加样本数量时,训练时长是线性增加的吗?
    • 4. 当增加树的颗数时,训练时长是线性增加的吗?
    • 5. 每个节点上保存什么信息?
    • 6.如何防止过拟合?
    • 7. gbdt 在训练和预测的时候都用到了步长,这两个步长一样么?
    • 8. gbdt中哪些部分可以并行?
    • 9. 树生长成畸形树,会带来哪些危害,如何预防?
  • GBDT与Xgboost的区别
  • GBDT与XGBoost算法上区别的总结
  • Bagging和Boosting 异同
  • RF与GBDT不同
  • 为什么进行归一化
  • GBDT 的调参
  • GBDT 与 Adaboost

N问GBDT

讲的hin好
GBDT详解

1. 怎么设置单棵树的停止生长条件?

设置参数:节点分裂时的最小样本数;min_samples;
最大深度:max_depth;
最多叶子节点数:max_leaf_nodes;
loss满足约束条件。

2. 如何评估特征的权重大小?

(1)计算每个特征在训练集下的特征增益,与所有特征的信息增益之和的比例为权重值。
(2)借鉴投票机制。用相同的参数对 w 每个特征训练一个模型,计算各模型下每个特征正确分类的个数,每个特征正确分类个数与所有正确分类个数之和的比例为权重值。

3. 当增加样本数量时,训练时长是线性增加的吗?

不是,因为生成单棵决策树时,需要选择最佳分裂点,以拟合残差,寻找最优的拟合值,而这个运算与样本个数N不是线性相关的。

4. 当增加树的颗数时,训练时长是线性增加的吗?

不是,因为每棵树生成的时间复杂度不同。
叶子节点数和每棵树的生成时间复杂度也不成正比。

5. 每个节点上保存什么信息?

树的中间节点保存某个特征的分割值,叶节点保存预测时某个类别的概率

6.如何防止过拟合?

(1)增加样本,移除噪声
(2)减少特征,保留重要的特征;
(3)对样本进行采样,建树的时候,选择一个子集(GBDT特有的方法,是无放回抽样);每一个子树都采用这个样本子集进行拟合。

7. gbdt 在训练和预测的时候都用到了步长,这两个步长一样么?

(1)这两个步长一样么?答:训练跟预测时,两个步长是一样的,也就是预测时的步长为训练时的步长,从训练的过程可以得知(更新当前迭代模型的时候)。
(2)都有什么用,如果不一样,为什么?答:它的作用就是使得每次更新模型的时候,使得loss能够平稳地沿着负梯度的方向下降,不至于发生震荡
(3)那么怎么设步长的大小?
答:有两种方法,一种就是按策略来决定步长,另一种就是在训练模型的同时,学习步长
A. 策略:
a 每个树步长恒定且相等,一般设较小的值;
b 开始的时候给步长设一个较小值,随着迭代次数动态改变或者衰减
B. 学习:
因为在训练第k棵树的时候,前k-1棵树时已知的,而且求梯度的时候是利用前k-1棵树来获得。所以这个时候,就可以把步长当作一个变量来学习。
(4)(太小?太大?)在预测时,对排序结果有什么影响?
答:如果步长过大,在训练的时候容易发生震荡,使得模型学不好,或者完全没有学好,从而导致模型精度不好
而步长过小,导致训练时间过长,即迭代次数较大,从而生成较多的树,使得模型变得复杂,容易造成过拟合以及增加计算量
不过步长较小的话,使训练比较稳定,总能找到一个稳定的局部最优解
个人觉得过大过小的话,模型的预测值都会偏离真实情况(可能比较严重),从而导致模型精度不好。
(5)跟shrinking里面的步长一样么?答:这里的步长跟shrinking里面的步长是一致的。

8. gbdt中哪些部分可以并行?

A. 计算每个样本的负梯度
B. 分裂挑选最佳特征及其分割点时,对特征计算相应的误差及均值时
C. 更新每个样本的负梯度
D. 最后预测过程中,每个样本将之前的所有树的结果累加的时候

9. 树生长成畸形树,会带来哪些危害,如何预防?

在生成树的过程中,加入树不平衡的约束条件。这种约束条件可以是用户自定义的。
例如对样本集中分到某个节点,而另一个节点的样本很少的情况进行惩罚。

GBDT与Xgboost的区别

gbdt(又称Gradient Boosted Decision Tree/Gradient Boosted Regression Tree),是一种迭代的决策树算法,该算法由多个决策树组成。

  1. 传统GBDT以 CART作为基分类器,xgboost 还支持线性分类器 。这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
  2. 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。使用二阶导数是为了更好地一般形式的损失残差近似
    Taylor公式展开:
  3. xgboost在代价函数里加入了正则项用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
  • 叶子节点的权值,也是模型需要提升的值, 相当于GBDT中损失函数的负梯度: 计算叶子权值(G和H是落在叶子节点上的样本,对于损失函数的一阶或二阶偏导,求和)

    分母加上了对结构损失的惩罚(如果结构复杂, 就少下降一点, 降低影响)
  • 每个叶子是相互独立的, 因此可以直接带入到损失函数中:
  1. Shrinkage(缩减),相当于学习速率(xgboost中的eta,GBDT 中的 learning rate)。xgboost在进行完一次迭代后,会将叶子节点的权重(即叶子结点的输出)乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。一般把eta设置得小一点,然后迭代次数设置得大一点。
  2. 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是 xgboost 异于传统 gbdt 的一个特性。
  3. 对缺失值的处理。对于特征的值有缺失的样本,xgboost 可以自动学习出它的分裂方向。
  4. 数据事先排序并且以block形式存储,有利于并行计算。
    解释:xgboost 工具支持并行。注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。
    决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。
    这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
  5. 可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点

    这个公式形式上跟ID3算法(采用entropy计算增益) 、CART算法(采用gini指数计算增益) 是一致的,都是用分裂后的某种值 减去 分裂前的某种值,从而得到增益。
  • 为了限制树的生长,我们可以加入阈值,当增益大于阈值时才让节点分裂,上式中的gamma即阈值(也是经常调整的一个参数),它是正则项里叶子节点数T的系数,所以xgboost在优化目标函数的同时相当于做了预剪枝
  • 另外,上式中还有一个系数lambda,是正则项里 leaf score 的 L2 模平方的系数,对leaf score做了平滑,也起到了防止过拟合的作用,这个是传统GBDT里不具备的特性。

GBDT与XGBoost算法上区别的总结

  1. GBDT使用一阶梯度作为残差的近似, XGBoost使用二阶梯度作为残差的近似;更加接近真实值, 收敛更快。
  2. GBDT的损失函数没有考虑到树的复杂度, 而XGBoost添加了正则项对复杂度进行了惩罚;
  3. GBDT是用的最小二乘法计算树结构(CART),而XGBoost使用的是损失函数的增益来计算树的结构。

Bagging和Boosting 异同

Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,即将分类器组装成分类器的方法。将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。

首先介绍Bootstraping,即自助法:它是一种有放回的抽样方法(可能抽到重复的样本)。
1、Bagging (bootstrap aggregating)
Bagging即套袋法,其算法过程如下:

  • 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
  • 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;
  • 对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

2、Boosting
其主要思想是,在PAC(概率近似正确)学习框架下,将弱分类器组装成一个强分类器。
关于Boosting的两个核心问题:
1)在每一轮如何改变训练数据的权值或概率分布?
Adaboost:通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。

2)通过什么方式来组合弱分类器?
通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。
提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。

3、Bagging,Boosting二者之间的区别

1)样本选择与样本权重上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。使用均匀取样,每个样例的权重相等
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整,分类错误率越大则权重越大。

2)预测函数:
Bagging:所有预测函数的权重相等
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

3)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。但是特征的选择上可以并行。

4、总结
下面是将决策树与这些算法框架进行结合所得到的新的算法:
1)Bagging + 决策树 = 随机森林
2)AdaBoost + 决策树 = 提升树
3)Gradient Boosting + 决策树 = GBDT、Xgboost

adaboost是boosting其中的一种,采用了指数损失函数exponential loss function(其实就是用指数的权重),根据不同的loss function还可以有其他算法,比如L2Boosting, logitboost…

RF与GBDT不同

  • 组成随机森林的树可以是分类树或回归树,而GBDT只由回归树组成;
  • 组成随机森林的树可以并行生成,而GBDT是串行生成;
  • 随机森林的结果是多数表决的,而GBDT则是多棵树累加之和
  • 随机森林对异常值不敏感,而GBDT对异常值比较敏感
  • 随机森林是通过减少模型的方差来提高性能,而GBDT是减少模型的偏差来提高性能的;(因为RF的子树方差大,合起来之后方差小;GBDT子树的偏差大,但是串行合并之后,偏差小)
  • 随机森林不需要进行数据预处理,即特征归一化。而GBDT则需要进行特征归一化
    • 没有考虑变量之间相关性,每次筛选都只考虑一个变量(因此不需要归一化)
    • 因为GBDT的树是在上一颗树的基础上通过梯度下降求解最优解,归一化能收敛的更快,而随机森林本来就是通过减少方差提高性能的,树之间建立关系是独立的,不需要归一化

为什么进行归一化

1)归一化后加快了梯度下降求最优解的速度
2)归一化有可能提高精度
如下左图为未归一化,梯度下降按照“之”字型收敛;
如下右图为归一化结果,梯度下降按照一个方向收敛。

GBDT 的调参

参数说明(sklearn)
n_estimators:控制弱学习器的数量
max_depth:设置树深度,深度越大可能过拟合
max_leaf_nodes:最大叶子节点数
learning_rate:更新过程中用到的收缩步长,(0, 1]
max_features:划分时考虑的最大特征数,如果特征数非常多,我们可以灵活使用其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。
min_samples_split:内部节点再划分所需最小样本数,这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。
min_samples_leaf:叶子节点最少样本数,这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。
min_weight_fraction_leaf:叶子节点最小的样本权重和,这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。
min_impurity_split:节点划分最小不纯度,使用 min_impurity_decrease 替代。
min_impurity_decrease:如果节点的纯度下降大于了这个阈值,则进行分裂。
subsample:采样比例,取值为(0, 1],注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做 GBDT 的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低,一般在 [0.5, 0.8] 之间。

GBDT 与 Adaboost

AdaBoost是通过提升错分数据点的权重来定位模型的不足;
Gradient Boosting是通过算梯度(gradient)来定位模型的不足

比较GBDT与Xgboost、boosting与bagging相关推荐

  1. 决策树 随机森林 xgboost_推荐收藏 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结...

    作者:ChrisCao https://zhuanlan.zhihu.com/p/75468124 一. 决策树决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行分割,直到达到结束条件 ...

  2. 决策树ID3、C4.5、CART、随机森林、bagging、boosting、Adaboost、GBDT、xgboost

    决策树 1.决策树学习算法主要由三部分构成: 特征选择 决策树生成 决策树的剪枝 特征选择 而我们应该基于什么准则来判定一个特征的分类能力呢? 这时候,需要引入一个概念:信息增益.,下面是公式(其中x ...

  3. 5000字干货 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结

    作者:ChrisCao https://zhuanlan.zhihu.com/p/75468124 大家好,我是小z 今天分享一波机器学习的干货~ 一. 决策树 决策树是一个有监督分类模型,本质是选择 ...

  4. 【机器学习】一文详解GBDT、Xgboost、Boosting与Bagging之间的区别

    GBDT与Xgboost的区别 N问GBDT 1. 怎么设置单棵树的停止生长条件? 2. 如何评估特征的权重大小? 3. 当增加样本数量时,训练时长是线性增加的吗? 4. 当增加树的颗数时,训练时长是 ...

  5. 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结

    作者:ChrisCao https://zhuanlan.zhihu.com/p/75468124 一. 决策树 决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行输的分割,直到达到结 ...

  6. xgboost原理,怎么防止过拟合。随机森林,GBDT,Xgoost的区别,bagging和boosting

    一.bagging和boosting的区别 参考:https://www.cnblogs.com/liuwu265/p/4690486.html Bagging和Boosting都是将已有的分类或回归 ...

  7. 面试必备|ID3、C4.5、CART、RF、boosting、Adaboost、GBDT、xgboost模型

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:知乎,笑个不停,https://zhuanlan.zhihu ...

  8. Boosting(Adboost、GBDT、Xgboost)

    转载:https://www.cnblogs.com/willnote/p/6801496.html 前言 本文为学习boosting时整理的笔记,全文主要包括以下几个部分: 对集成学习进行了简要的说 ...

  9. CTR 预测理论(九):Boosting 集成算法中 Adaboost, GBDT 与 XGBoost 的区别

    https://blog.csdn.net/Dby_freedom/article/details/81975255 最近总结树模型,尝试将主流 Boosting 实现方式做一个分析汇总,文中部分内容 ...

最新文章

  1. html文件 excel,怎么把html文件转成excel,excel表格代码
  2. abp angular 和mvc_使用.net core ABP和Angular模板构建博客管理系统(实现自己的业务逻辑)...
  3. undb php,显示html过滤报错,我不知道如何修改了。
  4. C++Pascal‘s Triangle杨辉三角的实现算法
  5. SVN使用log,list,cat,diff命令查看特定文件版本信息
  6. python图片读取优化_python读取raw binary图片并提取统计信息的实例
  7. postgresql集群方案hot standby初级测试(二) ——处理数据能力
  8. shell命令-if语句
  9. Jenkins分布式构建和部署(master-slave)
  10. itext汇总 生成pdf
  11. Robust Quasistatic Finite Elements and Flesh Simulation
  12. CV学习笔记-浅述CV方向
  13. Linux/Unix 多线程通信
  14. Redis 中文入库成功,读取数据写入文件乱码问题
  15. 论文A Tutorial on Graph-Based SLAM 学习笔记
  16. 如果我是决策者,我会决策做CPU吗?
  17. 驱动人生、驱动精灵等绿色去广告单文件版合集
  18. 刚刚想起猴子布丁,查了点资料,自己实践了下,记录汇总下。
  19. Docker学习之四:容器虚拟化网络与docker网络
  20. Echarts 里的桑基图

热门文章

  1. hdu3966_树链剖分
  2. Autodesk Inventor Routed Systems: Harness Autodesk Inventor Routed Systems: Harness Lynda课程中文字幕
  3. CANoe.DiVa操作指南——自动化测试节点丢失DTC
  4. 用JAVA自己画一张二维码
  5. 微信小程序获取手机号,含java后台接口实现
  6. 猛学亚马逊:顾客至上 Obsession over customers
  7. Bk3435 蓝牙门锁,配件 开关锁代码
  8. R count函数_R分析之前的数据准备
  9. oracle基础--建库建表
  10. 教大家如何用一行代码打造下载神器!下载全网视频、音频、图像!太牛了!