【机器学习】一文详解GBDT、Xgboost、Boosting与Bagging之间的区别
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
1. 怎么设置单棵树的停止生长条件?
设置参数:节点分裂时的最小样本数;min_samples;
最大深度:max_depth;
最多叶子节点数:max_leaf_nodes;
loss满足约束条件。
2. 如何评估特征的权重大小?
3. 当增加样本数量时,训练时长是线性增加的吗?
不是,因为生成单棵决策树时,需要选择最佳分裂点,以拟合残差,寻找最优的拟合值,而这个运算与样本个数N不是线性相关的。
4. 当增加树的颗数时,训练时长是线性增加的吗?
不是,因为每棵树生成的时间复杂度不同。
叶子节点数和每棵树的生成时间复杂度也不成正比。
5. 每个节点上保存什么信息?
树的中间节点保存某个特征的分割值,叶节点保存预测时某个类别的概率。
6.如何防止过拟合?
(1)增加样本,移除噪声;
(2)减少特征,保留重要的特征;
(3)对样本进行采样,建树的时候,选择一个子集(GBDT特有的方法,是无放回抽样);每一个子树都采用这个样本子集进行拟合。
7. gbdt 在训练和预测的时候都用到了步长,这两个步长一样么?
8. gbdt中哪些部分可以并行?
A. 计算每个样本的负梯度
B. 分裂挑选最佳特征及其分割点时,对特征计算相应的误差及均值时
C. 更新每个样本的负梯度时
D. 最后预测过程中,每个样本将之前的所有树的结果累加的时候
9. 树生长成畸形树,会带来哪些危害,如何预防?
在生成树的过程中,加入树不平衡的约束条件。这种约束条件可以是用户自定义的。
例如对样本集中分到某个节点,而另一个节点的样本很少的情况进行惩罚。
GBDT与Xgboost的区别
gbdt(又称Gradient Boosted Decision Tree/Gradient Boosted Regression Tree),是一种迭代的决策树算法,该算法由多个决策树组成。
- 传统GBDT以 CART作为基分类器,xgboost 还支持线性分类器 。这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
- 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。使用二阶导数是为了更好地一般形式的损失残差近似。
Taylor公式展开:
- xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
- 叶子节点的权值,也是模型需要提升的值, 相当于GBDT中损失函数的负梯度: 计算叶子权值(G和H是落在叶子节点上的样本,对于损失函数的一阶或二阶偏导,求和)
分母加上了对结构损失的惩罚(如果结构复杂, 就少下降一点, 降低影响) - 每个叶子是相互独立的, 因此可以直接带入到损失函数中:
- Shrinkage(缩减),相当于学习速率(xgboost中的eta,GBDT 中的 learning rate)。xgboost在进行完一次迭代后,会将叶子节点的权重(即叶子结点的输出)乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。一般把eta设置得小一点,然后迭代次数设置得大一点。
- 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是 xgboost 异于传统 gbdt 的一个特性。
- 对缺失值的处理。对于特征的值有缺失的样本,xgboost 可以自动学习出它的分裂方向。
- 数据事先排序并且以block形式存储,有利于并行计算。
解释:xgboost 工具支持并行。注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。
决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。
这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。 - 可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
这个公式形式上跟ID3算法(采用entropy计算增益) 、CART算法(采用gini指数计算增益) 是一致的,都是用分裂后的某种值 减去 分裂前的某种值,从而得到增益。
- 为了限制树的生长,我们可以加入阈值,当增益大于阈值时才让节点分裂,上式中的gamma即阈值(也是经常调整的一个参数),它是正则项里叶子节点数T的系数,所以xgboost在优化目标函数的同时相当于做了预剪枝。
- 另外,上式中还有一个系数lambda,是正则项里 leaf score 的 L2 模平方的系数,对leaf score做了平滑,也起到了防止过拟合的作用,这个是传统GBDT里不具备的特性。
GBDT与XGBoost算法上区别的总结
- GBDT使用一阶梯度作为残差的近似, XGBoost使用二阶梯度作为残差的近似;更加接近真实值, 收敛更快。
- GBDT的损失函数没有考虑到树的复杂度, 而XGBoost添加了正则项对复杂度进行了惩罚;
- GBDT是用的最小二乘法计算树结构(CART),而XGBoost使用的是损失函数的增益来计算树的结构。
Bagging和Boosting 异同
- 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
- 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;
- 对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)
2)预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
3)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。但是特征的选择上可以并行。
RF与GBDT不同
- 组成随机森林的树可以是分类树或回归树,而GBDT只由回归树组成;
- 组成随机森林的树可以并行生成,而GBDT是串行生成;
- 随机森林的结果是多数表决的,而GBDT则是多棵树累加之和;
- 随机森林对异常值不敏感,而GBDT对异常值比较敏感;
- 随机森林是通过减少模型的方差来提高性能,而GBDT是减少模型的偏差来提高性能的;(因为RF的子树方差大,合起来之后方差小;GBDT子树的偏差大,但是串行合并之后,偏差小)
- 随机森林不需要进行数据预处理,即特征归一化。而GBDT则需要进行特征归一化;
- 没有考虑变量之间相关性,每次筛选都只考虑一个变量(因此不需要归一化)
- 因为GBDT的树是在上一颗树的基础上通过梯度下降求解最优解,归一化能收敛的更快,而随机森林本来就是通过减少方差提高性能的,树之间建立关系是独立的,不需要归一化
为什么进行归一化
1)归一化后加快了梯度下降求最优解的速度;
2)归一化有可能提高精度。
如下左图为未归一化,梯度下降按照“之”字型收敛;
如下右图为归一化结果,梯度下降按照一个方向收敛。
GBDT 的调参
GBDT 与 Adaboost
AdaBoost是通过提升错分数据点的权重来定位模型的不足;
Gradient Boosting是通过算梯度(gradient)来定位模型的不足!
【机器学习】一文详解GBDT、Xgboost、Boosting与Bagging之间的区别相关推荐
- oracle join详解,inner join和left join之间的区别详解
前言 关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在 ...
- 一文详解 | OA、CRM、ERP三者的区别和联系是什么?
OA.CRM.ERP都是什么意思?三者之间有什么区别和联系?该如何去选型?这些都是大家非常关系的问题. 这个问题其实很好解答,只要你掌握了以下三个关键点,并把这三个关键点放到实际业务中去对比观察,就很 ...
- 一文详解像素、DPI、分辨率之间的关系
1.像素 像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素. 像素可以用一个数表示,比如一个"0.3兆像素"数码相机,它有额定30万像素:也可以用一对数字表示,例如& ...
- 一文详解头层反绒皮和二层反绒皮的区别,别再傻傻分不清了!
今天碰到有顾客询问头层反绒皮和二层反绒皮有什么区别?小编发现很多朋友在选购劳保鞋的时候,对劳保鞋的材质了解的并不多.之前给大家介绍过天然皮劳保鞋,天然牛皮作为传统的劳保鞋帮面材质有很多优势,那反绒皮劳 ...
- 【蓝桥杯Java_C组·从零开始卷】第八节、集合——list详解(ArrayList、 LinkedList 和 Vector之间的区别)
ArrayList. LinkedList 和 Vector之间的区别 ArrayList. LinkedList 和 Vector都实现了List接口,是List的三种实现,所以在用法上非常相似.他 ...
- 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...
- 一文详解决策树算法模型
AI有道 一个有情怀的公众号 上文我们主要介绍了Adaptive Boosting.AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不 ...
- 一文数学数模-相关性分析(二)斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码
前言 相关性分析算是很多算法以及建模的基础知识之一了,十分经典.关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达.其中常见的相关性系数就有三种:person相关系数,spearman相关系 ...
- 一文详解 ChatGPT:背后的技术,数据,未来发展
文章目录 一文详解 ChatGPT ChatGPT背后的技术 基于 Transformer 的预训练语言模型 提示学习与指令精调 思维链(Chain of Thought,COT) 基于人类反馈的强化 ...
最新文章
- python图像中如何显示中文
- BigMemroy系列文章--11. BigMemory中的SizeOf问题
- 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容都在这儿
- Android中利用服务来守护进程
- 二分法(折半查找)的运用之java实现猜数字游戏
- [BUUCTF-pwn]——[BJDCTF 2nd]secret
- 手把手教你玩转网络编程模型之完成例程(Completion Routine)
- 用fiddler抓包小程序
- 武汉理工大学java,武汉理工大学 web技术基础
- 解决outlook2013设置错误无法启动
- 计算机网络体系结构物流层,计算机网络体系结构58029.ppt
- 邻接矩阵中啥时候写0和无穷_(一)UDS诊断服务中的诊断会话控制(DiagnosticSessionControl,0x10)...
- 假如你有20万用来创业,你最想进入什么行业?
- 三十岁学python_我30岁了,转行学编程可以吗? 排除法告诉你答案
- poj 1113 graham模板(水平序)
- opengl es c语言教程,OpenGL ES2 学习教程4——Shader语言
- spring-第N篇整合SSM,即Mybatis+Spring+Spring MVC
- php怎么将农历转换成公历,农历公历转换器,公历农历转换
- Go sync.Pool 浅析
- 图片加文字用什么软件?推荐这三款软件给你
热门文章
- 奥克兰大学CS110(Auckland University Computer Science 110)的一些算法(2022)
- 人工智能时代,最容易被人工智能取代的职位是什么
- win32汇编学习的一些摘要
- 2021年中国数据安全行业发展现状及未来发展前景分析:数据安全市场快速增长[图]
- netlink怎么读_跑长途的时候如何不寂寞,车机互联G-Netlink全解说明
- 网络编程——线程竞争
- 国内期刊投稿用 CTeX(CTeX_2.9.2.164_Full)
- Chrome调试调试快捷键
- 智能语音交互:阿里的研究和实践
- 【屏蔽贴吧广告】贴吧广告屏蔽办法-解决方案 【普通用户 非会员】