GBDT算法简述

提升决策树GBDT

梯度提升决策树算法是近年来被提及较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越表现,有很多人对GBDT算法进行了开源代码的开发,比较火的是陈天奇的XGBoost和微软的LightGBM

一、监督学习

1、  监督学习的主要任务

监督学习是机器学习算法中重要的一种,对于监督学习,假设有m个训练样本:

其中,

,如分类问题;也可以为连续值,如回归问题。在监督学习中利用训练样本训练出模型,该模型能够细线从样本特征 。

为了能够对映射F进行求解,通常对模型设置损失函数

,并求的损失函数最小的情况下的映射为最好的映射。

对于一个具体的问题,如线性回归问题,其映射函数的形式为:

梯度下降法算法是求解最优化问题最简单、最直接的方法。梯度下降法是一种迭代的优化算法,对于优化问题:

其基本步骤为:

1)  随机选择一个初始点

2)  重复以下过程:

决定下降的方向:

选择步长

更新:

直到满足终止条件

梯度下降法的具体过程如下图所示:

2、  在函数空间的优化

以上是在指定的函数空间中对最优化函数进行搜索,那么,能否直接在函数空间中查找到最优的函数呢?根绝上述的梯度下降法的思路,对于模型的损失函数,为了

二、Boosting

1、  集成方法之Boosting

Boosting方法是集成学习中重要的一种方法,在集成学习方法中最主要的两种方法是Bagging和Boosting,在bagging中,通过对训练样本重新采样的方法得到不同的训练样本集,在这些新的训练样本集上分别训练学习器,最终合并每一个学习器的结果,作为最终的学习结果,Bagging方法的具体过程如下图所示:

在Bagging方法中最重要的算法为随机森林RF算法。由以上的图中可以看出,在Bagging方法中,b个学习器之间彼此是相互独立的,这样的特点使得Bagging方法更容易并行。与bagging不同的是,在Boosting算法中,学习器之间是存在先后顺序的,同时,每一个样本是都有权重的,初始时,每一个样本的权重都是相等的,首先,第1个学习器对训练样本进行学习,当学习完成后,增大错误样本的权重,同时减小正确样本的权重,再利用第2个学习器对其进行学习,依次进行下去,最终得到b个学习器,最终,合并这b个学习器的结果,同时,与Bagging中不同的是,每个学习器的权重也不一样,Boosting方法的具体过程如下图所示:

在Boosting方法中,最重要的方法包括:Adaboost和GBDT。

GB,梯度提升,通过进行M次迭代,每次迭代产生一个回归树模型,我们需要让每次迭代生成的模型对训练集的损失函数最小,而如何让损失函数越来越小呢?我们采用梯度下降的方法,在每次迭代时通过损失函数的负梯度方向移动来使得损失函数越来越小,这样我们就可以得到越来越精确的模型。

假设GBDT模型T有4棵回归树构成:t1,t2,t3,t4,样本标签Y(y1,y2,y3,….,yn)

设定该模型的误差函数为L,并且为SquaredError,则整体样本的误差推导如下:

对于首颗树,可以看出,拟合的就是训练样本的标签,并且得到t1预测后的残差,从误差函数的公式中可以看出,后面的残差r2=r1-t2,r3=r2-t3,r4=r3-t4……,由此可以得出,后面的回归树t2,t3,t4创建时都是为了拟合前一次留下的残差,可以看出,残差不断在减小,直至达到可接受的阈值为止。

对于梯度版本,采用误差函数的当前负梯度值作为当前模型预测留下的残差,因此创建新的一棵回归树来拟合该残差,更新后,整体gbdt模型的残差将进一步降低,也带来L的不断降低。

Gbdt树分为两种,

(1)       残差版本

残差其实就是真实值和预测值之间的差值,在学习的过程中,首先学习一棵回归树,然后将“真实值-预测值”得到残差,再把残差作为一个学习目标,学习下一棵回归树,依次类推,直到残差小于某个接近0的阈值或回归树数目达到某一阈值。其核心思想是每轮通过拟合残差来降低损失函数。

总的来说,第一棵树是正常的,之后所有的树的决策全是由残差来决定。

(2)       梯度版本

与残差版本把GBDT说成一个残差迭代树,认为每一颗回归树都在学习前N-1棵树的残差不同,Gradient版本把GBDT说成一个梯度迭代树,使用梯度下降法求解,认为每一棵回归树都在学习前N-1棵树的梯度下降值。总的来说两者相同之处在于,都是迭代回归树,都是累加每棵树结果作为最终结果,每棵树都在学习前N-1棵树尚存的不足,从总体流程和输入输出上两者是没有区别的;

两者的不同主要每步迭代时,是否使用Gradient作为求解方法。前者不用gradient而用残差-残差是全局最优值,gradient是局部最优方向*步长,即前者每一步都在试图让结果变成最好,后者则每一步试图让结果更好一点。

两者优缺点。看起来前者更科学一点-有绝对最优方向不学,为什么舍近求远学一个局部最优方向呢?原因在于灵活性。前者最大的问题是,由于它依赖残差,损失函数一般固定为放映残差的均方差,因此很难处理纯回归问题之外的问题。而后者求解办法为梯度下降法,只要可求导的损失函数都可以使用。

总结:GBDT又叫MART,是一种迭代的决策树算法,该算法是由多棵决策树组成,所有树的结论累加起来做最终答案,它在被提出之初就和SVM一起被认为是泛化能力较强的算法。

GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后可以用于分类。

重要参数的设置及意义

问题:XGBoost和GBDT在调参的时候为什么树的深度很小就能达到很高的精度?

用xgboost/gbdt在调参的时候把树的最大深度调成6就有很高的精度了,但是用Desion Tree、RandomForest的时候,需要把树的深度调到15或更高。用RandomForest所需要的树的深度和DesionTree一样,我能理解,因为他是用disitionTree组合在一起的,相当于做了很多次的DecisionTree一样。但是xgboost/gbdt仅仅用梯度上升法就能达到很高的预测精度,使我惊讶到怀疑他是黑科技,请问下xgboost/gbdt是怎么做到的?她的节点和一般般的Desition不同吗?

答:Boosting主要关注降低偏差,因为boosting能给予泛化性能相当弱的学习器构建出很强的集成;Bagging主要关注降低偏差,因此它在不剪枝的决策树、神经网络等学习器上效果更为明显。

随机森林和GBDT都属于集成学习的范畴。集成学习下有两个重要的策略Bagging和Boosting

对于Bagging算法来说,由于我们会并行的训练很多不同的分类器的目的就是降低这个方差,因为,采用了相互独立的基分类器以后,h值自然就会靠近,所以对于每个分类器来说,目标就是如何降低这个偏差,所以我们就会采用很深的甚至不剪枝的决策树。

对于Boosting来说,每一步我们都会在上一轮的基础上更加拟合原始数据,所以可以保证偏差,所以对于每个基分类器来说,问题就在于如何选择方差更小的分类器,既简单的分类器,所以我们选择了深度很浅的决策树。

原文地址:https://www.cnblogs.com/zhibei/p/9425206.html

时间: 2024-10-04 22:49:47

GBDT算法简述的相关文章

理解GBDT算法(二)——基于残差的版本

GBDT算法有两种描述思路,一个是基于残差的版本,一个是基于梯度gradient的版本.这篇我们先说说基于残差的版本. 前面一篇博文已经说了该版本的大致原理,请参考. http://blog.csdn.net/puqutogether/article/details/41957089 这篇我们再总结一个几个注意点: 这个版本的核心思路:每个回归树学习前面树的残差,并且用shrinkage把学习到的结果大步变小步,不断迭代学习.其中的代价函数是常见的均方差. 其基本做法就是:先学习一个回归树,然后

理解GBDT算法(三)——基于梯度的版本

上一篇中我们讲到了GBDT算法的第一个版本,是基于残差的学习思路.今天来说第二个版本,可以说这个版本的比较复杂,涉及到一些推导和矩阵论知识.但是,我们今天可以看到,两个版本之间的联系,这个是学习算法的一个重要步骤. 这篇博文主要从下面这几个方面来说基于梯度的GBDT算法: (1)算法的基本步骤: (2)其中的学数学推导: (3)基于梯度的版本和基于残差的版本之间的联系: 在讲解算法的详细步骤之前,我们可以先明确一个思路,就是梯度版本的GBDT是用多类分类Multi-class classific

GBDT 算法:原理篇

本文由云+社区发表 GBDT 是常用的机器学习算法之一,因其出色的特征自动组合能力和高效的运算大受欢迎. 这里简单介绍一下 GBDT 算法的原理,后续再写一个实战篇. 1.决策树的分类 决策树分为两大类,分类树和回归树. 分类树用于分类标签值,如晴天/阴天/雾/雨.用户性别.网页是否是垃圾页面: 回归树用于预测实数值,如明天的温度.用户的年龄.网页的相关程度: 两者的区别: 分类树的结果不能进行加减运算,晴天 晴天没有实际意义: 回归树的结果是预测一个数值,可以进行加减运算,例如 20 岁 3

机器学习——GBDT算法与stacking算法

GBDT(梯度提升迭代决策树) 总结 优先解决回归问题,将第一个数据的残差传入到第二个数据中去 构建下一个数据集的数据是上一个数据集的残差 详述 GBDT也是Boosting算法的一种,但是和AdaBoost算法不同;区别如下: AdaBoost算法是利用前一轮的弱学习器的误差来更新样本权重值,然后一轮一轮的迭代; GBDT也是迭代,但是GBDT要求弱学习器必须是回归CART模型,而且GBDT在模型训练的时候,是要求模型预测的样本损失尽可能的小.优先做回归问题. 要求:把boosting算法的第

集成学习之梯度提升树(GBDT)算法

梯度提升树(GBDT)的全称是Gradient Boosting Decision Tree.GBDT还有很多的简称,例如GBT(Gradient Boosting Tree), GTB(Gradient Tree Boosting ),GBRT(Gradient Boosting Regression Tree), MART(Multiple Additive Regression Tree)等,其实都是指的同一种算法,本文统一简称GBDT. GBDT 也是 Boosting 算法的一种,但是

计步器算法简述和模块使用

计步器作为算法功能模块, 本应该和业务模块分离, 解耦合. 这样也可以更加专注于算法的升级. 我来简述一下计步器算法的实现原理, 给大家一些启发. 1. 算法 对于所有计步器而言, 早期必然是使用加速度传感器(Accelerometer Sensor)测量步数, 随后谷歌推出计步传感器(Step Counter Sensor), 由硬件或系统计算步数的变化, 使得算法简化. 有些手机, 未提供计步传感器; 有些手机, 在待机过程中关闭计步传感器. 简单介绍一下实现算法. 1. 加速度传感器(Ac

GB和GBDT 算法流程及分析

1.优化模型的两种策略: 1)基于残差的方法 残差其实就是真实值和预测值之间的差值,在学习的过程中,首先学习一颗回归树,然后将“真实值-预测值”得到残差,再把残差作为一个学习目标,学习下一棵回归树,依次类推,直到残差小于某个接近0的阀值或回归树数目达到某一阀值.其核心思想是每轮通过拟合残差来降低损失函数. 总的来说,第一棵树是正常的,之后所有的树的决策全是由残差来决定. 2)使用梯度下降算法减小损失函数. 对于一般损失函数,为了使其取得最小值,通过梯度下降算法,每次朝着损失函数的负梯度方向逐步移

K-近邻分类算法 简述

1. 简述: 简单地说,谷近邻算法采用测量不同特征值之间的距离方法进行分类. 优点:精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用数据范围:数值型和标称型. 2.工作原理是 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系.输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签.一般来说,我们只选择样本数据集中前&个

GBDT算法梳理

1.GBDT(Gradient Boosting Decision Tree)思想 Boosting : 给定初始训练数据,由此训练出第一个基学习器: 根据基学习器的表现对样本进行调整,在之前学习器做错的样本上投入更多关注: 用调整后的样本,训练下一个基学习器: 重复上述过程 T 次,将 T 个学习器加权结合. Gradient boosting Gradient boosting是 boosting 的其中一种方法,它主要的思想是,每一次建立单个学习器时,是在之前建立的模型的损失函数的梯度下降