GBDT 简述
GBDT 全称 Gradient Boosting Decision Tree,梯度提升决策树。
梯度增强决策树的思想来源于两个地方,首先是增强算法(Boosting),然后是梯度增强(Gradient Boosting)的想法。
增强算法是一种试图用弱学习器提升为强学习器的算法。这种算法中比较成熟、有代表性的是 AdaBoost 算法。增强算法的工作机制比较类似,先从初始训练集学习出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使前面做错的训练样本后续得到更多关注,再从调整后的训练样本上训练下一个基学习器。如此重复进行,直到基学习器的数目达到事先指定的值,最终将所有基学习器进行加权结合。
AdaBoost 提出后不久,机器学习和统计学家 Friedman 从统计视角解释 AdaBoost 实际上是基于加性模型以类似牛顿迭代法来优化指数损失函数,受此启发,杰米姆提出了梯度增强的想法。
梯度增强也是希望用一系列的弱学习器来达到一个强学习器的效果,从而逼近目标变量的值。根据加性模型的假设,这种逼近效果是这些弱学习器的加权平均。
如何构造这些弱学习器和加权平均的权重呢?
梯度增强采用了优化理论的视角,使得构造这些部分变得更加直观。
首先这是个迭代算法,每一轮迭代,把当前所有学习器的加权平均结果作为这一轮的函数值,然后求得针对某一个损失函数对于当前所有学习器的参数的一个梯度,然后利用某个弱学习器算法来拟合这个梯度,这个弱学习器算法可以是线性回归模型,逻辑斯特回归模型等。最后,利用线查找的方式找到权重。说白了,就是利用简单模型拟合不同迭代轮数的梯度。
梯度增强可跟梯度下降对比,梯度下降的最终预测式也可写成加和的形式,每一轮梯度的值和学习率共同叠加形成最终结果。这和构造弱学习器的加权平均联系起来看,每个梯度的值可以认为是个弱学习器,学习速率就是权重。
理解了梯度增强,梯度增强决策树就容易理解了,就是用决策树来当作弱学习器,去拟合梯度增强过程中的梯度。然后融合到整个梯度增强的过程中。
最终,梯度增强决策树就是每一轮迭代都拟合一个新的决策树,来表达当前的梯度,然后跟前面所有的决策树进行叠加。在这个过程中,决策树的形状,如多少层、总共有多少节点等,都是超参数。总共有多少决策树,也就是有多少轮迭代,是重要的调节参数,也是防止过拟合的重要手段。
参考资料
- 洪亮劼,机器学习排序算法经典模型:GBDT
GBDT 简述的更多相关文章
- 提升学习算法简述:AdaBoost, GBDT和XGBoost
1. 历史及演进 提升学习算法,又常常被称为Boosting,其主要思想是集成多个弱分类器,然后线性组合成为强分类器.为什么弱分类算法可以通过线性组合形成强分类算法?其实这是有一定的理论基础的.198 ...
- GBDT算法简述
提升决策树GBDT 梯度提升决策树算法是近年来被提及较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越表现,有很多人对GBDT算法进行了开源代码的开发,比较火的 ...
- GBDT 梯度提升决策树简述
首先明确一点,gbdt 无论用于分类还是回归一直都是使用的CART 回归树.不会因为我们所选择的任务是分类任务就选用分类树,这里面的核心是因为gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练 ...
- 随机森林(Random Forest),决策树,bagging, boosting(Adaptive Boosting,GBDT)
http://www.cnblogs.com/maybe2030/p/4585705.html 阅读目录 1 什么是随机森林? 2 随机森林的特点 3 随机森林的相关基础知识 4 随机森林的生成 5 ...
- 机器学习(七)—Adaboost 和 梯度提升树GBDT
1.Adaboost算法原理,优缺点: 理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络.对于决策树,Adaboost分类用了CART分类 ...
- 简述 OAuth 2.0 的运作流程
本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- scikit-learn 梯度提升树(GBDT)调参小结
在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...
- 梯度提升树(GBDT)原理小结
在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting De ...
随机推荐
- python2与python3之间的主要区别
python2与python3之间的主要区别 print py2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印 py3:print函数,函数就以为这必须要加 ...
- POJ1014:Dividing(多重背包)
http://poj.org/problem?id=1014 Description Marsha and Bill own a collection of marbles. They want to ...
- C#可扩展数组转变为String[]数组
简单备忘: 由于需要将数据最终以逗号隔开来拼接,因而写了下面的处理方法. public void GetJoinString() { ArrayList arr = new ArrayList(); ...
- 转载自(http://snailz.diandian.com/post/2012-10-24/40041265730)
PHP 5.4.8 添加系统服务命令 之前没注意,PHP 5.4.8 的安装包有自带的系统服务注册文件的 打开编译安装包,换成你自己的路径 cd /mydata/soft/php-5.4.8/ cp ...
- Django初级手册2-管理界面的使用及定制
管理界面的使用 管理界面的URL,帐号和密码在第一次输入syncdb时建立 http://127.0.0.1:8000/admin/ 将app加入管理界面 编辑polls/admin.py from ...
- Perl中的哈希(四)
Perl中的哈希数据结构.相比较于数组,这种数据结构对于数据查找和统计更加方便. 一个特殊的哈希,%ENV,表示当前terminal下,通过setenv设置的variable的键值. 键:环境变量名, ...
- mysql utf8编码设置
1.建立数据库时指定数据库db_test为utf8编码.: create database db_test character set utf8; 修改数据库db_test编码的命令为: alter ...
- python解决matplotlib中文坐标值乱码的问题
加上这句话即可 plt.rcParams['font.sans-serif']=['SimHei'] 效果:
- mvn deploy 推送到私有仓库,注意当前日期
由于更改了本机系统时间到过去的一个时间,导致mvn deploy推送到私有仓库后,该更新的jar包时间戳比较旧,客户端不能更新得到新的jar包.
- Windows10 64位下安装TensorFlow谷歌人工智能系统已官方原生支持
Windows10 64位下安装TensorFlow谷歌人工智能系统已官方原生支持 GitHub - tensorflow/tensorflow: Computation using data flo ...