本人第一次看到提升方法时,也是一脸懵逼;但是时隔一个寒假,当我为春招恶补机器学习知识时,第二次看见提升方法,顿时有了“拨开云雾见青天”的感觉;古人"温故而知新"诚不欺我。下面是我对常见的四种提升方法的一点理解。

本文来自于本人的知乎的机器学习爱好者专栏

作者:超爱学习

一文弄懂AdaBoost、提升树、残差树、GDBT_基函数

1.AdaBoost

AdaBoost全称为Adaptive Boosting,中文名称叫做自适应提升算法;虽然名字听起来给人一种高大上的感觉,但其实背后的原理并不难理解。什么叫做自适应,就是这个算法可以在不同的数据集上都适用,这个基本和废话一样,一个算法肯定要能适应不同的数据集。提升方法是指:分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类器的性能。

AdaBoost和提升树、残差树、GDBT之间也有这十分密切的联系,可以毫不夸张的说,明白了AdaBoost的原理之后,理解提升树、残差树和GDBT树也是十分的容易。

1.1原理推导

推导就是copy李航的《统计学习方法》推导方法,我会适当的做一些解释以便大家理解。

训练数据如下: 

 ,其中 

 , 

 。最后我们要得到分类器

 ,其中 

 为分类器的个数,每一次训练我们都获得一个基分类器 

 , 

 是每个基训练器的权重,也就是说每个基分类器说话的分量。我们看最后的分类器,他就是结合多个不同基分类器的意见,集百家之长,最终输出结果。

那么每个基分类器的权重就显得十分重要了,那么这个权重是如何确定的呢,AdaBoost是这么考虑的,如果一个基分类器的准确率高,那么它的权重就会更高一点,反之权重就会较低。

通常我们认为AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的二类分类学习方法。现在有出现了三个新名词:

(1)加法模型

这个就和字面的意思一样,一个函数是由多个基函数累加而成 

其中 

 是每个基函数的系数, 

 是每个基函数的参数, 

 就是一个基函数了。假设一个基函数为 

 ,那么一个加法模型就可以写成: 

 。

(2)前向分步算法

在给定训练数据以及损失函数 

 的情况下,加法模型的经验风险最小化即损失函数极小化问题如下:

这个问题直接优化比较困难,前向分步算法解决这个问题的思想如下:由于我们最终的分类器其实加法模型,所以我们可以从前向后考虑,每增加一个基分类器,就使损失函数

的值更小一点,逐步的逼近最优解。这样考虑的话,每一次计算损失函数的时候,我们只需要考虑当前基分类器的系数和参数,同时此次之前基分类器的系数和参数不受此次的影响。算法的思想有点类似梯度下降,每一次都向最优解移动一点。

因此我们可以得到前向分布算法的步骤(参考《统计学习方法》p144):

输入:

训练数据集 

 ,损失函数 

基分类器

 。输出:加法模型 

(1)初始化 

(2)对 

(a)极小化损失函数

得到参数 

 。(b)更新 

(3)得到加法模型 

(3)指数损失函数

指数损失函数的形式如下

如果前向分步算法采用指数函数做为损失函数,那么其就为AdaBoost算法。

经过 

 轮的迭代操作,我们得到了 

 :

在第 

 轮迭代得到 

 和 

使用前向分布算法我们的目标是使指数损失函数的值最小

上式可以改写成为

其中 

 。由于 

 变换不依赖 

 。因此与最小化无关。接下来我们就要最小化 

 。假设 

 为我们所求,先考虑 

 。由于 

 为正整数,所以要最小化 

 此式,只要让 

 的值相等的尽可能的多。因为当两者值域为-1和+1。当两者取值相等时,无论 

 的取何值,指数都会小于0。也就是说,此时我们可以先不考虑 

 的取值,只考虑 

 。很明显可以得出 

在已知 

 的情况下,我们求 

 。

求导之后,可得

其中 

上面几个公式的推导如果不清楚,可以私信我。

1.2AdaBoost算法步骤

有了上述推导,,我们很自然的就可以写出AdaBoost算法的步骤

输入:训练数据如下: 

 ,其中 

 , 

 。输出:最后我们要得到分类器

 。

(1)初始化训练数据的权值分布

(2)对 

(a)使用具有权值分布 

 的训练数据集学习,得到基本分类器 

 。(b)计算 

 在训练集上的分类误差率

(c)计算

的系数

(d)根据前 

 次得到的结果,更新权值:

其中 

 ,是一个规范化因子,用于归一化。(3)构建最终的分类器

 。

2.提升树

提升树和AdaBoost之间的关系就好像编程语言中对象和类的关系,一个类可以生成多个不同的对象。提升树就是AdaBoost算法中基分类器选取决策树桩得到的算法。

用于分类的决策树主要有利用ID3和C4.5两种算法,我们选取任意一种算法,生成只有一层的决策树,即为决策树桩。

3.残差树

我们可以看到AdaBoost和提升树都是针对分类问题,如果是回归问题,上面的方法就不奏效了;而残差树则是针对回归问题的一种提升方法。其基学习器是基于CART算法的回归树,模型依旧为加法模型、损失函数为平方函数、学习算法为前向分步算法。

提升树模型可以表示为 

 。

什么叫做残差,比如小明的年龄是10岁,第一次我们的残差树拟合的值为6,那么第二次我们拟合的目标值为10-6=4。

采用平方误差损失函数时,我们每一次学习的是上一次残差,损失函数为

其中

为残差。每次通过拟合残差值,那么最终就可以得到以以个很好的模型。

4.GDBT

GDBT中文名称叫做梯度提升树。其基本原理和残差树类似,基学习器是基于CART算法的回归树,模型依旧为加法模型、学习算法为前向分步算法。不同的是,GDBT没有规定损失函数的类型,设损失函数为 

 。前向加法算法的每一步都是拟合损失函数的负梯度

如果一个函数到达极小值,那么其梯度值一定为零;当函数没有到达最小值的时候,我们每次都选择梯度的反方向走,这样可以最快的到达极小值。这也就是GDBT的思想。

参考:

1.《统计学习方法》李航

2.机器学习算法GBDT的面试要点总结-上篇 - ModifyBlog - 博客园

​https://www.cnblogs.com/ModifyRong/p/7744987.html​

3.梯度提升树(GBDT)原理小结 - 刘建平Pinard - 博客园

​https://www.cnblogs.com/pinard/p/6140514.html​

一文弄懂AdaBoost、提升树、残差树、GDBT_基函数_02

备注:公众号菜单包含了整理了一本AI小抄非常适合在通勤路上用学习