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的一个特性。
  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指数计算增益) 是一致的,都是用分裂后的某种值 减去 分裂前的某种值,从而得到增益。

GBDT与XGBoost算法上区别的总结

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

Bagging和Boosting 异同

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

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

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不同

为什么进行归一化

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. oracle join详解,inner join和left join之间的区别详解

    前言 关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在 ...

  2. 一文详解 | OA、CRM、ERP三者的区别和联系是什么?

    OA.CRM.ERP都是什么意思?三者之间有什么区别和联系?该如何去选型?这些都是大家非常关系的问题. 这个问题其实很好解答,只要你掌握了以下三个关键点,并把这三个关键点放到实际业务中去对比观察,就很 ...

  3. 一文详解像素、DPI、分辨率之间的关系

    1.像素 像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素. 像素可以用一个数表示,比如一个"0.3兆像素"数码相机,它有额定30万像素:也可以用一对数字表示,例如& ...

  4. 一文详解头层反绒皮和二层反绒皮的区别,别再傻傻分不清了!

    今天碰到有顾客询问头层反绒皮和二层反绒皮有什么区别?小编发现很多朋友在选购劳保鞋的时候,对劳保鞋的材质了解的并不多.之前给大家介绍过天然皮劳保鞋,天然牛皮作为传统的劳保鞋帮面材质有很多优势,那反绒皮劳 ...

  5. 【蓝桥杯Java_C组·从零开始卷】第八节、集合——list详解(ArrayList、 LinkedList 和 Vector之间的区别)

    ArrayList. LinkedList 和 Vector之间的区别 ArrayList. LinkedList 和 Vector都实现了List接口,是List的三种实现,所以在用法上非常相似.他 ...

  6. 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...

  7. 一文详解决策树算法模型

    AI有道 一个有情怀的公众号 上文我们主要介绍了Adaptive Boosting.AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不 ...

  8. 一文数学数模-相关性分析(二)斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码

    前言 相关性分析算是很多算法以及建模的基础知识之一了,十分经典.关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达.其中常见的相关性系数就有三种:person相关系数,spearman相关系 ...

  9. 一文详解 ChatGPT:背后的技术,数据,未来发展

    文章目录 一文详解 ChatGPT ChatGPT背后的技术 基于 Transformer 的预训练语言模型 提示学习与指令精调 思维链(Chain of Thought,COT) 基于人类反馈的强化 ...

最新文章

  1. python图像中如何显示中文
  2. BigMemroy系列文章--11. BigMemory中的SizeOf问题
  3. 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容都在这儿
  4. Android中利用服务来守护进程
  5. 二分法(折半查找)的运用之java实现猜数字游戏
  6. [BUUCTF-pwn]——[BJDCTF 2nd]secret
  7. 手把手教你玩转网络编程模型之完成例程(Completion Routine)
  8. 用fiddler抓包小程序
  9. 武汉理工大学java,武汉理工大学 web技术基础
  10. 解决outlook2013设置错误无法启动
  11. 计算机网络体系结构物流层,计算机网络体系结构58029.ppt
  12. 邻接矩阵中啥时候写0和无穷_(一)UDS诊断服务中的诊断会话控制(DiagnosticSessionControl,0x10)...
  13. 假如你有20万用来创业,你最想进入什么行业?
  14. 三十岁学python_我30岁了,转行学编程可以吗? 排除法告诉你答案
  15. poj 1113 graham模板(水平序)
  16. opengl es c语言教程,OpenGL ES2 学习教程4——Shader语言
  17. spring-第N篇整合SSM,即Mybatis+Spring+Spring MVC
  18. php怎么将农历转换成公历,农历公历转换器,公历农历转换
  19. Go sync.Pool 浅析
  20. 图片加文字用什么软件?推荐这三款软件给你

热门文章

  1. 奥克兰大学CS110(Auckland University Computer Science 110)的一些算法(2022)
  2. 人工智能时代,最容易被人工智能取代的职位是什么
  3. win32汇编学习的一些摘要
  4. 2021年中国数据安全行业发展现状及未来发展前景分析:数据安全市场快速增长[图]
  5. netlink怎么读_跑长途的时候如何不寂寞,车机互联G-Netlink全解说明
  6. 网络编程——线程竞争
  7. 国内期刊投稿用 CTeX(CTeX_2.9.2.164_Full)
  8. Chrome调试调试快捷键
  9. 智能语音交互:阿里的研究和实践
  10. 【屏蔽贴吧广告】贴吧广告屏蔽办法-解决方案 【普通用户 非会员】