本人第一次看到提升方法时,也是一脸懵逼;但是时隔一个寒假,当我为春招恶补机器学习知识时,第二次看见提升方法,顿时有了“拨开云雾见青天”的感觉;古人"温故而知新"诚不欺我。下面是我对常见的四种提升方法的一点理解。
本文来自于本人的知乎的机器学习爱好者专栏
作者:超爱学习
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
备注:公众号菜单包含了整理了一本AI小抄,非常适合在通勤路上用学习。