boosting方法浅析——从Adaboost到GBDT

 

1. 何为boosting方法(提升方法)?

常见的集成学习方法有两种:bagging和boosting。

bagging方法,以随机森林为代表。bagging方法主要通过对数据集抽样来改变数据的分布,再针对不同的抽样集分别单独训练基分类器,最后将基分类器结合起来成一个强分类器。bagging最常用的是有放回的自主采样法,这也是bagging方法名字的由来。它的基分类器的常见结合方式也比较简单,分类问题一般采用简单投票法,回归问题采用简单平均法。

boosting方法则是另外一种既成思路,也是目前性能最好的一类机器学习方法,首先思考一个问题:

很容易知道,弱学习算法通常要比强学习算法更容易得到,那么能不能将弱学习算法通过某种方法boosting为强学习算法呢?(弱的学习算法可以理解为输出结果略好于随机猜测的效果。例如对二分类而说,分类准确率略高于50%)

boosting方法就是从弱学习算法出发,反复学习,得到一系列的弱分类器(基分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用学习算法学习一系列的弱分类器。从这里可以看出,提升方法是串行的方法,基分类器是逐个被训练的。

boosting方法需要解决的基本问题有两个:

一是:在每一轮如何改变训练数据的权值或概率分布?

二是:如何将众多弱分类器组成一个强分类器?

抓住提升方法的这两个问题,有利于迅速理解提升方法。首先来看一种最具代表性的提升方法Adaboost。


 

2. 从Adaboost算法说起

2.1 为什么要了解Adaboost算法?

因为Adaboost是提升方法的开始,后续的许多boosting思想都是受Adaboost而来的。

关于Adaboost最早的文献见于Freund发表于1997年的论文“A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting”。后续的有很多关于Adaboost的研究,将Adaboost从二分类拓展到多分类问题见于文献[1](1999),Adaboost使用前向分部加法模型的解释见于文献[2](2000),Adaboost与逻辑回归的关系的相关研究见于文献[3](2004)。最早的关于提升树和梯度提升(GBDT)的文献见于[2]、[4](2001)。可以看出,提升方法的研究最早是从Adaboost开始的,它作为一种经典的提升方法,奠定了提升方法的基础。理解Adaboost有助于理解后续的比较复杂的提升方法。此处可以参考李航老师《统计学习方法》第八章后的参考文献,和周老师的《机器学习》8.6节的阅读材料,简要介绍了boosting的起源和Adaboost的发展。

Adaboost中的Ada是adaptive的算写,Adaboost可以翻译为自适应提升算法。是一种具有较早的代表性的二分类提升方法

 

2.2  回答Adaboost作为提升方法的两个基本问题:

(在每一轮如何改变训练数据的权值或概率分布?)

  1. 提高那些前一轮被分错的样本的权重,降低那些前一轮被分对的样本的权重。这样一来,那些被分错的样本将会在下一轮弱分类器收到更多的关注。

(如何将众多弱分类器组成一个强分类器?)

  1. Adaboost采用加权多数表决的方法。具体的,给每个弱分类器设置一个权重,加大分类误差率小的弱分类器的权重,使其在表决中其重要作用。

 

2.3 Adaboost算法具体算法步骤:

 boosting方法浅析——从Adaboost到GBDT_第1张图片

 

 

 

对算法的说明:

  1. Adaboost是假设训练数据忽悠均匀的权值分布的,也就是说每个训练样本在基分类器的学习中的贡献是一样的,所以开始的权值初始化将所有权值设置的一样。
  2. 误差率em其实是所有错误样本的权值之和。
  3. 基分类器的系数αm是一个关于误差率的函数取对数的值,这个关于误差率的函数其实就是正确率和错误率的比值,这说明该基分类器正确率越高,它的系数越大,该基分类器在最终的组合中起的作用越大。
  4. 下一轮更新的权重是一个关于当前权重值和系数a的值,将其展开后可以看出。正确分类的样本权值缩小,而被错误分类的样本权值被扩大,在下一轮更新中被更多的关注。
  5. 系数αm之和并不等于1,最终分类结果有输出值的符号确定,结果的绝对值表示对分类的确信度。

 


 

 

3. 加法模型,使用加法模型解释Adaboost

Adaboost被提出以后由于其state-of-art的性能,不会产生过拟合等特点受到极大关注。Adaboost的作者Yoav Freund 和 Robert Schapire因此在2003年获得了计算机科学方面的重要奖项——哥德尔奖。Adaboost提出后一直有学者试图从数学的角度解释其良好性能,其中Friedman于1998年发表的论文《Additive Logistic Regression: a Statistical View of Boosting 》,从统计学的角度对Adaboost做了解释。他使用的解释方法就是加法模型。

从这个角度,Adaboost可以认为是:由基分类器组成的模型是加法模型、损失函数为指数函数、学习算法为前向分部算法的二分类学习算法(这里的学习算法是指求解、学习参数的方法

 

3.1 加法模型,和其学习算法—前向分布算法:

加法模型的表述如下:

 boosting方法浅析——从Adaboost到GBDT_第2张图片

 boosting方法浅析——从Adaboost到GBDT_第3张图片

 

前向分布算法可以解决加法模型复杂的优化问题:从前向后,每一步只学习一个基函数及其系数,逐步逼近目标函数。

 boosting方法浅析——从Adaboost到GBDT_第4张图片

 

 

3.2 Adaboost的另一种解释:加法模型 + 前向分部算法 + 损失函数为指数函数

前面已经提到,Adaboost是可以认为是一种特殊的使用前向分部算法优化的加法模型,特殊之处就在于将加法模型的损失函数设定为指数损失。下面我们就将加法模型的损失设置为指数损失,并推导参数求解过程。

首先,Adaboost的最终分类器可以表示为:

其中αm为基分类器系数,Gm(x)为基分类器。对比公式8.19和8.13可以看出他们是等价的,只是参数的表述方式不同。说明Adaboost的模型是和加法模型一致的。

下面将加法模型优化过程中的损失函数设置为指数损失函数:

 

此时前向分部算法需要优化目标变成如下形式:

boosting方法浅析——从Adaboost到GBDT_第5张图片

boosting方法浅析——从Adaboost到GBDT_第6张图片

下面还有有一个基分类器的系数αm没有得到,首先对8.21式的等号后内容化简

 boosting方法浅析——从Adaboost到GBDT_第7张图片

最后求得αm,它的表达式如下,可以看出他和Adaboost算法中的8.2式是完全一样的,其中的em是一个有当前基分类器决定的表达式,对应的是Adaboost中的8.1式,即误差率。

boosting方法浅析——从Adaboost到GBDT_第8张图片

boosting方法浅析——从Adaboost到GBDT_第9张图片

到这里使用加法模型和前向分部算法解释Adaboost算法的推导就结束了,从推导过程的形式上来看,Adaboost确实是当损失函数为指数函数时,使用前向分部算法求解的加法模型。(尽管如此,这种推导没有解释为什么Adaboost没有过拟合现象,因此很多人认为这只是过程相似而已。见《机器学习》第八章阅读材料)

Adaboost和前向分部算法都是一个抽象的算法框架,只有当基分类器和任务确定后,才是一个具体的算法实例。上述的推导表明可以用加法模型和前向分部算法来解释Adaboost,那可不可以将这种解释框架推广到其他问题,比如回归问题,比如其他的损失函数?

 

4. 提升树boosting tree

到目前为止都没有指定基分类器的类型,也就是使用何种弱学习算法进行boosting提升,只讲到了提升的具体办法和流程。

提升树是以分类树或回归树为基分类器的提升方法。是当前统计学习方法中性能最好的之一。

对于二分类问题,将Adaboost中的基分类器限定为二类分类树既是二分类的提升树算法,这时的提升树算法是Adaboost算法的特殊情况

 

针对不同问题的提升树的不同之处主要在于损失函数的不同。回归问题的损失函数为平方误差损失,分类问题为指数损失,一般问题时为一般损失函数。

 

对于回归问题和分类问题,只需要简单的拟合当前模型的残差。

 

 

 

 

 

注意:这里的拟合残差指根据回归树的生成算法步骤,用平方误差最小化准则求解每个单元上的最优输出值时,本来应该取输出变量Y与预测值的平方差,在提升树使用前向分步算法到下一个决策树学习的时候,可以把当前模型拟合数据的残差作为下一个模型学习的输出变量Y’,通过学习每一轮的学习误差(残差),到下一轮拟合的误差会越来越小,最后将模型输出累加起来,就可以得到最优的输出结果。

 

更一般的提升树:梯度提升树

使用负梯度代替残差,基分类器使用CART回归树

 

 

对于一般损失函数,优化比较困难。因此提出了梯度提升算法,主要思想是利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树。

 

 

这就是梯度提升树Gradient Boosting Decision Tree,即梯度提升树,简称GBDT,也叫GBRT(Gradient Boosting Regression Tree),也称为Multiple Additive Regression Tree(MART)。

 

 

 

 

 

GBDT

上面已经介绍了梯度提升树的由来和算法过程,使用负梯度来代替残差,将提升算法统一到一个大一统gradient boost框架。

不同的误差函数都可以使用该算法来进行了gradient boost,根据误差函数的不同,可以将它们归纳如下:

 

 

当前基于GBDT的梯度提升框架如xgboost、lightGBM,已经不简单的是梯度提升树,而是梯度提升框架,其基分类器可以自定义为各种树模型,如传统的GBDT、随机森林RF、dart、goss等等

 

GBDT的分类算法:

上面我们看到梯度提升算法是有回归问题引出的,那面对分类问题,负梯度的计算时怎样的呢?

《统计学习》这本书在这之前讲了Adaboost算法,它是一个特殊的损失函数为指数函数的二分类算法。也证明了当Adaboost的基分类器限定为二分类树时的提升树。从另一方面看,Adaboost算法也就是损失函数为指数函数时的GBDT算法。

另一种解决分类问题时负梯度求解的方法是使用类似于逻辑回归的对数似然函数为损失函数,也就是使用类别的预测概率值和真是概率值的差来拟合基分类器。

 

 

 

 

由于将残差推广到负梯度,对于各种任务的各种损失函数,GBDT都可以求解。对于分类问题,有对数损失和指数损失两种函数。对于回归问题,有平方损失、绝对损失、Huber损失、分为损失等等。具体见 梯度提升树(GBDT)原理小结 - 刘建平Pinard - 博客园  https://www.cnblogs.com/pinard/p/6140514.html

 

 

GBDT的正则化:主要有三种方法

第一种为和Adaboost类似的正则化项,即在基学习器前乘上步长(学习率),在0和1之间。

第二种为子采样,即不放回的抽取一部分去做GBDT的决策树的拟合,取值在0-1之间,通常实际使用中会在0.5-0.8之间。

第三种是对CART回归树做正则化剪枝。

 

 

 

 

Xgboost

 

转载于:https://www.cnblogs.com/chuanyun/p/10183842.html

你可能感兴趣的:(boosting方法浅析——从Adaboost到GBDT)