Bagging与Boosting

  当我们试图用任何机器学习技术来预测目标变量时,实际值和预测值的主要差异是噪声方差偏差。集成有助于减少这些因素。集成技术进一步分为Bagging和Boosting。

  BaggingBoosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类器组装成强分类器的方法。

1 Bagging (bootstrap aggregating)

  首先介绍Bootstraping,即自助法:它是一种有放回的抽样方法(可能抽到重复的样本)。从偏差-方差分解角度看,Bagging主要关注降低方差

这里写图片描述
图片来源

  Bagging即套袋法,是一个简单的集成技术,我们建立许多独立的预测变量/模型/学习者,并使用一些模型平均技术将它们结合起来。(例如加权平均数,多数票或正态平均数)。其算法过程如下:

  A)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)

  B)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

  C)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

2 Boosting

  其主要思想是将弱分类器组装成一个强分类器。在PAC(概率近似正确)学习框架下,则一定可以将弱分类器组装成一个强分类器。

  关于Boosting的两个核心问题:

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

  通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。

2)通过什么方式来组合弱分类器?

  通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。

  而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。

3 Bagging,Boosting二者之间的区别

1)样本选择上:

  • Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

  • Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

  • Bagging:使用均匀取样,每个样例的权重相等

  • Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

  • Bagging:所有预测函数的权重相等。

  • ;Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

  • Bagging:各个预测函数可以并行生成

  • Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

4 总结

这里写图片描述

  从算法来看,Bagging关注的是多个基模型的投票组合,保证了模型的稳定,因而每一个基模型就要相对复杂一些以降低偏差(比如每一棵决策树都很深);而Boosting采用的策略是在每一次学习中都减少上一轮的偏差,因而在保证了偏差的基础上就要将每一个基分类器简化使得方差更小

  这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。下面是将决策树与这些算法框架进行结合所得到的新的算法:

  1)Bagging + 决策树(CART) = 随机森林

  2)AdaBoost + 决策树 = 提升树

  3)Gradient Boosting + 决策树(CART) = GBDT

5 附录—GBDT的基本原理

5.1 GBDT概述

  梯度提升树属于Boosting集成学习算法的一种,其思想不同于随机森林、Bagging的并行化、投票的流程,GBDT模型所输出的结果是由其包含的若干棵决策树累加而得到的,每一棵子决策树都是实现对先前决策树组预测残差的拟合,是对先前模型的结果的一种“修正”。梯度提升树既可以用于回归问题(此时被称为CART回归树),也可以被用于解决分类问题(GBDT分类树)。本文主要介绍GBDT回归的原理!

  在GBDT的迭代中,假设我们前一轮迭代得到的强学习器 f m 1 ( x ) , 损失函数 L ( y , f m 1 ( x ) ) , 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器 h m ( x ) ,让本轮的损失 L ( y , f m ( x ) ) = L ( y , f m 1 ( x ) + h m ( x ) ) 最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。

  GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

  从上面的例子看这个思想还是蛮简单的,但是有个问题是这个损失的拟合不好度量,损失函数各种各样,怎么找到一种通用的拟合方法呢?

5.2 GBDT的负梯度拟合

这里写图片描述

  在上一节中,我们介绍了GBDT的基本思路,但是没有解决损失函数拟合方法的问题。针对这个问题,大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第 m 轮的第 i 个样本的损失函数的负梯度表示为

r i m = [ L ( y i , f ( x i ) ) f ( x i ) ] f ( x ) = f m 1 ( x )

  利用 ( x i , r i m ) , ( i = 1 , 2 , . . N ) ,我们可以拟合一颗CART回归树,得到了第 m 颗回归树,其对应的叶节点区域 R j m , j = 1 , 2 , . . . , J m 。其中 J m 为叶子节点的个数。

  针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值 γ j m 如下:

γ j m = a r g min γ x i R j m L ( y i , f m 1 ( x i ) + γ )

  这样我们就得到了本轮的决策树拟合函数如下:

h m ( x ) = j = 1 J m γ j m I ( x R j m )

  从而本轮最终得到的强学习器的表达式如下:

f m ( x ) = f m 1 ( x ) + j = 1 J m γ j m I ( x R j m )

  通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。

5.3 GBDT回归算法

  好了,有了上面的思路,下面我们总结下GBDT的回归算法。
  输入:训练集样本{ ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) }, 最大迭代次数 M , 损失函数 L
  输出:强学习器 f ^ ( x )

这里写图片描述

  1) 初始化弱学习器

f 0 ( x ) = a r g m i n γ i = 1 N L ( y i , γ )

  2) 对迭代轮数 m = 1 , 2 , . . . M
    a) 对样本 i = 1 , 2 . . . N ,计算负梯度

r i m = [ L ( y i , f ( x i ) ) f ( x i ) ] f ( x ) = f m 1 ( x )

    b) 利用 ( x i , r i m ) , ( i = 1 , 2 , . . N ) ,我们可以拟合一颗CART回归树,得到了第 m 颗回归树,其对应的叶节点区域 R j m , j = 1 , 2 , . . . , J m 。其中 J m 为叶子节点的个数。

    c) 对叶子区域 j = 1 , 2 , . . J m ,计算最佳拟合值

γ j m = a r g min γ x i R j m L ( y i , f m 1 ( x i ) + γ )

    d) 更新强学习器
f m ( x ) = f m 1 ( x ) + j = 1 J m γ j m I ( x R j m )

  3) 得到强学习器f(x)的表达式

f ^ ( x ) = f M ( x ) = f 0 ( x ) + m = 1 M j = 1 J m γ j m I ( x R j m )

5.4 优缺点

  优点

  • 可以灵活处理各种类型的数据,包括连续值和离散值。

  • 在相对少的调参时间情况下,预测的准备率也可以比较高。这个是相对SVM来说的。

  • 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。

  缺点

  • 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

参考
[1] Bagging和Boosting的概念及区别
[2] 机器学习(24)之Bagging与随机森林
[3] 自我代码提升之梯度提升树
[4] 干货|从零开始学习Gradient Boosting算法
[5] 梯度提升树(GBDT)原理小结

猜你喜欢

转载自blog.csdn.net/bryant_meng/article/details/79863030