GBDT算法(最简单)
——GBDT的原理很简单,就是所有弱分类器的结果相加等于预测值。
目录
- ==——GBDT的原理很简单,就是所有弱分类器的结果相加等于预测值。==
- 1. 解释一下GBDT算法的过程
- 1.1 Boosting思想
- 1.2 GBDT原来是这么回事
- 3. GBDT的优点和局限性有哪些?
- 3.1 优点
- 3.2 局限性
- 4. RF(随机森林)与GBDT之间的区别与联系
- 5. 代码实现
1. 解释一下GBDT算法的过程
GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,使用的是Boosting的思想。
1.1 Boosting思想
Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。
Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。
1.2 GBDT原来是这么回事
GBDT的原理很简单,就是所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的残差(这个残差就是预测值与真实值之间的误差)。当然了,它里面的弱分类器的表现形式就是各棵树。
举一个非常简单的例子,比如我今年30岁了,但计算机或者模型GBDT并不知道我今年多少岁,那GBDT咋办呢?
它会在第一个弱分类器(或第一棵树中)随便用一个年龄比如20岁来拟合,然后发现误差有10岁;
接下来在第二棵树中,用6岁去拟合剩下的损失,发现差距还有4岁;
接着在第三棵树中用3岁拟合剩下的差距,发现差距只有1岁了;
最后在第四课树中用1岁拟合剩下的残差,完美。
最终,四棵树的结论加起来,就是真实年龄30岁(实际工程中,gbdt是计算负梯度,用负梯度近似残差)。
为何gbdt可以用用负梯度近似残差呢?
回归任务下,GBDT 在每一轮的迭代时对每个样本都会有一个预测值,此时的损失函数为均方差损失函数,
所以,当损失函数选用均方损失函数是时,每一次拟合的值就是(真实值 - 当前模型预测的值),即残差。此时的变量是,即“当前预测模型的值”,也就是对它求负梯度。
训练过程
简单起见,假定训练集只有4个人:A,B,C,D,他们的年龄分别是14,16,24,26。其中A、B分别是高一和高三学生;C,D分别是应届毕业生和工作两年的员工。如果是用一棵传统的回归决策树来训练,会得到如下图所示结果:
现在我们使用GBDT来做这件事,由于数据太少,我们限定叶子节点做多有两个,即每棵树都只有一个分枝,并且限定只学两棵树。我们会得到如下图所示结果:
在第一棵树分枝和图1一样,由于A,B年龄较为相近,C,D年龄较为相近,他们被分为左右两拨,每拨用平均年龄作为预测值。
此时计算残差(残差的意思就是:A的实际值 - A的预测值 = A的残差),所以A的残差就是实际值14 - 预测值15 = 残差值-1。
注意,A的预测值是指前面所有树累加的和,这里前面只有一棵树所以直接是15,如果还有树则需要都累加起来作为A的预测值。
然后拿它们的残差-1、1、-1、1代替A B C D的原值,到第二棵树去学习,第二棵树只有两个值1和-1,直接分成两个节点,即A和C分在左边,B和D分在右边,经过计算(比如A,实际值-1 - 预测值-1 = 残差0,比如C,实际值-1 - 预测值-1 = 0),此时所有人的残差都是0。残差值都为0,相当于第二棵树的预测值和它们的实际值相等,则只需把第二棵树的结论累加到第一棵树上就能得到真实年龄了,即每个人都得到了真实的预测值。
换句话说,现在A,B,C,D的预测值都和真实年龄一致了。Perfect!
A: 14岁高一学生,购物较少,经常问学长问题,预测年龄A = 15 – 1 = 14
B: 16岁高三学生,购物较少,经常被学弟问问题,预测年龄B = 15 + 1 = 16
C: 24岁应届毕业生,购物较多,经常问师兄问题,预测年龄C = 25 – 1 = 24
D: 26岁工作两年员工,购物较多,经常被师弟问问题,预测年龄D = 25 + 1 = 26
所以,GBDT需要将多棵树的得分累加得到最终的预测得分,且每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差。
3. GBDT的优点和局限性有哪些?
3.1 优点
预测阶段的计算速度快,树与树之间可并行化计算。
在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。
采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系。
3.2 局限性
GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。
4. RF(随机森林)与GBDT之间的区别与联系
相同点:
都是由多棵树组成,最终的结果都是由多棵树一起决定。
RF和GBDT在使用CART树时,可以是分类树或者回归树。
不同点:
组成随机森林的树可以并行生成,而GBDT是串行生成
随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和
随机森林对异常值不敏感,而GBDT对异常值比较敏感
随机森林是减少模型的方差,而GBDT是减少模型的偏差
随机森林不需要进行特征归一化。而GBDT则需要进行特征归一化
5. 代码实现
纸上得来终觉浅,绝知此事要躬行
GitHub:https://github.com/NLP-LOVE/ML-NLP/blob/master/Machine%20Learning/3.2%20GBDT/GBDT_demo.ipynb
以上内容参考自:
Github/ML-NLP/Machine Learning/3.2 GBDT
代码补充参考for——小白:
Python科学计算——Numpy.genfromtxt
pd.DataFrame()函数解析(最清晰的解释)
iloc的用法(最简单)
scikit-learn 梯度提升树(GBDT)调参小结(包含所有参数详细介绍)
GBDT算法(最简单)相关推荐
- gbdt 算法比随机森林容易_机器学习(七)——Adaboost和梯度提升树GBDT
1.Adaboost算法原理,优缺点: 理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络.对于决策树,Adaboost分类用了CART分类 ...
- gbdt 算法比随机森林容易_随机森林与GBDT
Bagging策略 1.总样本数量是n个,从样本中重采样(有放回的)选出n个样本 ,会有约33.2%的样本不会被抽到 2.在所有属性上对这n个样本建立分类器(比如决策树,svm,lr) 3.重复步骤1 ...
- 决策树之 GBDT 算法 - 回归部分
GBDT(Gradient Boosting Decision Tree)是被工业界广泛使用的机器学习算法之一,它既可以解决回归问题,又可以应用在分类场景中,该算法由斯坦福统计学教授 Jerome H ...
- 转载:GBDT算法梳理
学习内容: 前向分布算法 负梯度拟合 损失函数 回归 二分类,多分类 正则化 优缺点 sklearn参数 应用场景 转自:https://zhuanlan.zhihu.com/p/58105824 G ...
- GBDT 算法:原理篇
2019独角兽企业重金招聘Python工程师标准>>> 本文由云+社区发表 GBDT 是常用的机器学习算法之一,因其出色的特征自动组合能力和高效的运算大受欢迎. 这里简单介绍一下 G ...
- gbdt算法_GBDT算法原理及应用
是新朋友吗?记得先点蓝字关注我哦- 作者介绍 知乎@王多鱼 京东的一名推荐算法攻城狮. 主要负责商品推荐的召回和排序模型的优化工作. 一.GBDT算法原理 Gradient Boosting Deci ...
- sklearn实现GBDT算法(分类)
阿喽哈~小天才们,今天我们聊一聊GBDT 上一篇文章我们详细地说了GBDT算法原理,包括为什么拟合负梯度.负梯度为何可以替代残差.二分类GBDT算法公式和实例演算,感兴趣的童鞋请移步GBDT算法详解& ...
- catboost和xgboost_CatBoost:比XGBoost更优秀的GBDT算法
[51CTO.com快译]互联网的算法有很多应用场景,包括推荐系统.计算广告和金融反欺诈等.许多互联网的机器学习和数据挖掘问题都可以转化为分类问题.在处理这一类分类问题的时候,最常用的方法包括逻辑回归 ...
- 通俗易懂理解GBDT算法原理-转
GBDT算法深入解析 https://www.zybuluo.com/yxd/note/611571 通俗易懂理解GBDT算法原理 https://blog.csdn.net/qq_36696494/ ...
- GBDT算法原理深入分析
GBDT算法原理深入分析1 https://www.zybuluo.com/yxd/note/611571 GBDT算法原理深入分析2 https://www.wandouip.com/t5i1874 ...
最新文章
- 特征工程学习,19项实践Tips!代码已开源!
- 我们学习效率为什么这么低?CMU和PITT的科学家利用BCI技术对此做了相关研究
- 身份证校验原理和PHP实现
- 职称计算机隐藏桌面图标,2018年职称计算机考试WindowsXP操作题(1)
- windows 系统监视器_使用Windows 7中的可靠性监视器对计算机问题进行故障排除
- matlab 16位灰度值转8位,在matlab中如何将灰度值为24位的转化为8?
- Python List reverse()方法
- 相对熵与交叉熵_熵、KL散度、交叉熵
- jupyter新建文件_Jupyter渲染网页的3种方式
- 代码的坏味道:控制结构嵌套太深
- 一次 Discuz X3.2 切换数据库后无法登录的问题排查经历
- ES6/ES2015核心内容-转载
- 分享12306抢票心得-最终篇
- SpringCloud Eureka 高可用
- pp助手|pp助手下载
- 微信小程序实现扫一扫功能
- 微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈及QQ自定义分享--微信分享
- har2case接口脚本必备工具
- 初始化DirectX遇到的问题
- android 触摸屏干扰,一种电容触摸屏的抗干扰方法及其控制模块与流程