GBDT+XGBoost算法详解(上):GBDT

一、集成算法

集成算法:集成学习(ensemble learning)本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务,所以常常比单一学习器具有更为显著的泛化性能。

集成学习的一般结构:先产生一组“个体学习器”,再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据产生。

根据个体学习器的生成方式,目前的集成学习主要可以分为两类:①个体学习器之间存在强依赖关系、必须串行生成的序列化方法,代表是Boosting(提升);②个体学习器之间不存在强依赖关系、可同时生成并行化方法,代表是Bagging(装袋)随机森林

二、Boosting

简介:Boosting是一族可将弱学习器提升为强学习器的算法。Boosting 族算法最著名的代表是 AdaBoost(自适应提升)。

AdaBoost:AdaBoost的自适应在于前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时,在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器通俗地讲就是,将若干带有权值的弱分类器累加得到强分类器的过程。

工作机制:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。

Boosting算法通过“重赋权法”(re-weighting)对特定的数据分布进行学习。对无法接受带权样本的基学习算法,则可通过“重采样法”(re-sampling)来处理。Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成

三、Bagging与随机森林

个体学习器之间不存在强依赖关系,即个体学习器应尽可能相互独立,尽可能具有较大的差异。

如何实现较大差异?对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器。考虑到产生的子集可能完全不同,也就是说每个基学习器只用到了一小部分训练数据,甚至不足以进行有效学习,这显然无法确保产生出比较好的基学习器。考虑使用相互有交叠的采样子集

1、Bagging:bagging采用了一种有放回的抽样方法来生成训练数据。通过多轮有放回的对初始训练集进行随机采样,多个训练集被并行化生成,对应可训练出多个基学习器(基学习器间不存在强依赖关系),再将这些基学习器结合,构建出强学习器。其本质是引入了样本扰动,通过增加样本随机性,达到降低方差的效果。

在对预测输出进行结合时, Bagging 通常对分类任务使用简单投票法,对回归任务使用简单平均法。

2、随机森林RF是Bagging的一个扩展变体。RF在以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。

(1)样本选取随机。对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。

(2)节点选取随机。传统决策树在选择划分属性时是在当前结点的属性集合中选择一个最优属性(根据信息增益、增益率等准则),而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含K个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度,推荐k=log(d)。

四、GBDT

简介:GBDT,全称Gradient Boosting Decision Tree,梯度提升树。主要包含两部分:Gradient BoostingDecision Tree

1、Decision Tree:CART回归树。

什么是CART?CART全称是Classification andRegression Tree,一种著名的决策树学习算法,分类和回归任务都可用。

为什么不用CART分类树?无论是回归问题还是分类问题,GBDT需要将多个弱分类器器的结果累加起来,且每次迭代要拟合的是梯度值,是连续值所以要用回归树,也就是说DT独指Regression Decision Tree。

回归树最佳划分点的判别标准?分类树:熵或者基尼系数。回归树:平方误差。

2、Gradient Boosting:拟合负梯度

梯度提升:一个函数的梯度方向是函数上升最快的方向,相反的,负梯度方向是函数下降最快的方向。这里的梯度提升其实是一种梯度下降的思想

梯度提升算法:利用最速下降的近似方法,即利用损失函数的负梯度在当前模型的值,作为回归问题中提升树算法的残差的近似值,拟合一个回归树。

boosting的一种训练方式--基于残差的训练保留已有的模型,这个模型还不能解决的部分我们接着去解决,这就是基于残差的训练方式。虽然每一个模型都比较弱, 但至少我们是可以确保它们每一个是有点作用的, 总比随机猜测要好。

基于残差的训练可解决以下类似问题:(残差--还不能解决的问题

(1)给了一个预测问题,张三在此数据上训练出了一个模型 - “Model1”,但是效果不怎么好,误差比较大,如何接收这个模型但不能作出任何改变?

(2)接了一个项目, 然后其中一位同事给出了一些方案, 但还不完善, 我们也不能要求让他去改而且也不能不使用他的方案,怎么做?

提升树原理用下一个弱分类器去拟合当前残差(真实值-当前预测值),之后所有弱分类器的结果相加等于预测值,在GBDT中,这里弱分类器的表现形式就是CART树。如图所示Y = Y1 + Y2 + Y3。

对于Boosting Tree,最后决策时为什么是求和而不是平均?

对于回归问题,假如我们按照残差的方式学习了很多颗决策树,在预测阶段其实跟Bagging是不一样的,因为在Bagging里每棵树是独立训练的,互不影响,所以最后决策时需要投票决策。但boosting的情况不一样,Boosting的训练是串行的,一个接一个,每一棵树的训练都依赖于之前的残差。基于这些特点,对于Boosting我们应该要求和而不是平均。

3、GBDT

3.1 原理

GBDT,梯度提升决策树,是一种迭代的决策树算法,该算法由多颗决策树组成,所有树的结论累加起来做最终答案它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。

3.2 GBDT回归任务【例题1】

某人今年30岁了,但计算机或模型GBDT并不知道今年多少岁,那GBDT咋办呢?

第一步:在第一棵树中,随便用一个年龄(20岁)来拟合,发现误差有10岁(10=30-20);
第二步:在第二棵树中,用6岁去拟合剩下的损失,发现差距还有4岁;
第三步:在第三棵树中,用3岁拟合剩下的差距,发现差距只有1岁了;
第四步:在第四课树中,用1岁拟合剩下的残差,完美。
最终,四棵树的结论加起来,就是真实年龄30岁(实际工程中,gbdt是计算负梯度,用负梯度近似残差)。

为何gbdt可以用负梯度近似残差呢?

回归任务下的损失函数为均方差损失函数:

它的负梯度计算公式为:

所以,当损失函数选用均方损失函数时,每一次拟合的值就是(真实值-当前模型预测的值),即残差。

3.3 GBDT回归任务【例题2】

假定训练集只有4个人:A,B,C,D,他们的年龄分别是14,16,24,26.其中A、B分别是高一和高三学生;C,D分别是应届毕业生和工作两年的员工,问题是预测年龄。

如果是用一颗传统的回归决策树来训练,得到如下图所示结果:

我们用GBDT来预测年龄,限定叶子结点最多两个,限定只学两棵树。

 在第一棵树分枝和图1一样,由于A,B年龄较为相近,C,D年龄较为相近,他们被分为左右两拨,每拨用平均年龄作为预测值。进而得到A,B,C,D的残差分别为-1,1,-1,1。

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.4 GBDT分类任务

GBDT的分类算法和回归算法没有区别,但由于样本输出不是连续值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差。

解决方式:

用指数损失函数,此时GBDT退化为Adaboost算法。

用类似于逻辑回归的对数似然损失函数的方法(分为二元和多元分类)。

3.5 GBDT与LR的区别

(1)都是监督学习,Logisitic Regression(LR)是分类模型,GBDT既可作分类又可回归。

(2)损失函数:LR的loss是交叉熵,GBDT采用回归拟合(将分类问题通过softmax转换为回归问题),用当前损失去拟合实际值与前一轮模型预测值之间的残差。

(3)从正则的角度:LR采用l1和l2正则;GBDT采用弱分类器的个数,也就是迭代轮次T,T的大小影响着算法的复杂度。

(4)特征组合:LR是线性模型,具有很好的解释性,很容易并行化,处理亿条训练数据不是问题,但是学习能力有限,需要大量的特征工程;GBDT可以处理线性和非线性的数据,具有天然优势进行特征组合 。

猜你喜欢

转载自blog.csdn.net/bb8886/article/details/130053109