机器学习笔记(六)Boosting集成学习算法Adaboost和GBDT

本文深入讲解了Boosting算法中的Adaboost与GBDT原理,包括它们的数学推导、应用场景及sklearn实践案例。对比了Boosting与Bagging的区别。

一、前言

在前一篇文章中我们介绍了集成学习算法中的Bagging模型,本篇文章将继续介绍集成学习算法中的另一个代表性算法Boosting模型。Boosting是一种可将弱学习器提升为强学习器的算法,其理论依据是Kearns和Valiant首先提出了”强可学习(strongly learnable)”和“弱可学习(weakly learnable)”的概念。他们指出:

  1. 一个概念(一个类,label),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的;
  2. 一个概念(一个类,label),如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。
  3. Schapire后来证明了: 强可学习和弱可学习是等价的。 也就是说,在PAC学习的框架下,一个概念是强可学习的 充分必要条件 是 这个概念是弱可学习的。

如此一来,问题便成为:在学习中,如果已经发现了”弱学习算法”,那么能否将它提升为”强学习算法”呢? 因为通常发现弱学习算法通常要比发现强学习算法容易得多。那么如何具体实施提升,便成为Boosting算法的核心问题。

Boosting的工作机制为:先从初始训练集训练出一个基学习器(弱学习器),再根据基学习器的表现对样本分布进行调整,使得先前的基学习器识别错误的训练样本在后面的基学习器中得到更多的关注(调高权重),然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到指定的值,或整个集成算法结果达到退出条件,然后将这些学习器进行加权组合得到最终结果。由前面过程可知Boosting是一个串行学习过程,后一个弱学习器的学习样本依赖于前一个弱学习器的学习结果。Boosting模型较具代表性的算法有GBDT和AdaBoost等。下面详细介绍这两种模型的原理和API。在介绍之前,我们先思考两个问题:①前一个弱学习器在学习完后,怎么调整判断错误和判断正确样本的权重?②对于最终得到的多个弱学习器该怎么组合?即两个权重问题,一个是样本的权重怎么确定,另一个是弱学习器的权重怎么调整?对于任何一种Boosting算法,都需要解决这两个问题,而Boosting算法的核心也正在于这两个问题。

图1 Boosting算法结构

二、AdaBoost

AdaBoost(Adaptive Boosting)是Boosting算法中的一个经典代表,由Yoav Freund和Robert Schapire在1995年提出。

1.1 分类问题

1.1.1 算法原理

对于分类问题,AdaBoost首先从训练集用初始权重训练出一个弱学习器1(弱分类器,只要比随机选择的效果好一些就行),这里的弱学习器可以为浅层决策树等算法,在sklearn的AdaBoost API类AdaBoostClassifier中,默认的弱学习器就是深度为1的决策树。然后根据弱学习器1的学习误差率来更新训练样本的权重并计算弱学习器1在最终组合时的权重,使得弱学习器1识别错误的的训练样本点的权重变高,从而使得这些识别错误的样本在后面的弱学习器2中得到更多的重视。基于调整权重后的训练集来训练弱学习器2(构建第二棵树),如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过加权组合策略进行整合,得到最终的强学习器。具体计算方法如下:

(1)假设我们的训练集样本是一个二分类(类别为-1和1两种)数据集: T = \left \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m})\right \} ,y_{i} \in (-1,1),在构建第一颗树(第一轮迭代)的时候每个样本的权重 D_{1}(i) = \frac{1}{m}

(2)第k个弱学习器在数据集上的加权错误率计算方法为:

                                                                e_{k} = P(G_{k}(x_{i}) \neq y_{i}) = \sum_{i=1}^{m}w_{ki}I(G_{k}(x_{i}) \neq y_{i})

其中

                                                              I(G_{k}(x_{i}) \neq y_{i}) = \left\{\begin{matrix} 1, (G_{k}(x_{i}) \neq y_{i})\\ 0, (G_{k}(x_{i}) = y_{i})\end{matrix}\right. 

其实就是识别错误样本的权重和,例如在构建第一颗树的时候,如果有5个样本识别错误,则e_{1} = \frac{5}{m}

(3)第k个弱学习器在最后组合为强学习器时的权重系数为:

                                                             \alpha _{k} = \frac{1}{2}\ln \frac{1-e_{k}}{e_{k}}

可以发现:分类误差率 e_{k} 越大,则对应的弱分类器权重系数 \alpha _{k} 就越小,即在组合强分类器的时候越不重要

(4)假设第k个弱学习器学习的样本权重为D_{k} = (w_{k1},w_{k2},...,w_{km}),则第k+1个弱学习器的学习样本权重为:

                                                             w_{k+1,i} = \frac{w_{ki}}{Z_{K}}\exp (-\alpha _{k}y_{i}G_{k}(x_{i})) = \left\{\begin{matrix} \frac{w_{ki}}{Z_{k}}\exp(-\alpha _{k}) & y_{i} = G_{k}(x_{i})\\ \frac{w_{ki}}{Z_{k}}\exp(\alpha _{k}) & y_{i}\neq G_{k}(x_{i})\end{matrix}\right. 。

可以发现:前一个弱学习器识别正确的样本权重变小了,识别错误的样本权重变大了。这里Z_{k}是规范化(标准化)因子:

                                                            Z_{k} =\sum_{i=1}^{m}w_{ki} \exp (-\alpha _{k}y_{i}G_{k}(x_{i}))

其实就是调整后的权重和,所以很容易得出调整后的样本权重和依然为1,这也解释了为什么在(2)中计算错误率时,可以直接求和错误样本的权重得出。

(5)最终的强分类器组合策略就很容易得出了:

                                                          f(x) = sign(\sum_{k=1}^{T}\alpha _{k}G_{k}(x))

关于上面公式的计算方法,尤其是(3)、(4)中的公式暂时只需要知道怎么计算的即可,至于为什么要这样计算,后面会详细介绍。

1.1.2 案例解析

为了更好地理解1.1.1中介绍的计算方法,本节我们以一个简单的模拟数据集为例来说明AdaBoost的学习过程。

已知有下列样本,用AdaBoost算法学习一个强分类器,默认每个弱学习器都是深度为1的决策树:

(1)构建第一个弱学习器

第一棵树的学习样本权重都是:w_{1i} = \frac{1}{10},原始数据集的10个样本构建决策树有9个候选划分点,分别计算划分点取2.5、5.5、8.5时的弱学习器错误率:

  • e_{1,2.5} = 0.3,小于2.5的为1,大于等于2.5的为-1,6、7、8错误
  • e_{1,5.5} = 0.4,小于5.5的为-1,大于等于5.5的为1,0、1、2、9错误
  • e_{1,8.5} = 0.3,小于8.5的为1,大于等于8.5为-1

可知第一个弱学习器在划分点取2.5时(8.5也可)错误率最低为0.3。此时,第一个弱学习器为:

                                                          G_{1}(x) = \left\{\begin{matrix} 1, & x<2.5\\ -1,& x\geqslant 2.5 \end{matrix}\right.

加权错误率 e_{1} = 0.3,弱学习器权重为:

                                                         \alpha _{1} = \frac{1}{2} \ln \frac{1-e_{1}}{e_{1}}=0.4236

分类错误样本6、7、8调整后的权重为:

                                                        w = \frac{0.1}{Z_{1}}\exp (0.426) = 0.1666 

分类正确样本0、1、2、3、4、5、9调整后的权重为:

                                                       w = \frac{0.1}{Z_{1}}\exp (-0.426) = 0.0715

(2)构建第二个弱学习器

由(1)可知第二个弱学习器学习的样本权重为:D_{2} =\left \{ 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715 \right \}。重新遍历所有候选划分点的错误率,可以发现当划分点取8.5时,错误率最低,小于8.5的为1,大于等于8.5的为-1,样本3、4、5判断错误,第二个弱学习器的错误率为 e_{2} = 0.0715+0.0715+0.0715=0.2145。即得到的第二个弱学习器为:

                                                       G_{2}(x) = \left\{\begin{matrix} 1, & x<8.5\\ -1,& x\geqslant 8.5 \end{matrix}\right.

加权错误率 e_{2} = 0.2145,弱学习器权重为:

                                                       \alpha _{2} = \frac{1}{2} \ln \frac{1-e_{2}}{e_{2}}=0.6496

分类错误样本3、4、5调整后的权重为:

                                                      w = \frac{0.0715}{Z_{2}}\exp (0.6496) = 0.1667 

分类正确样本0、1、2调整后的权重为:

                                                      w = \frac{0.0715}{Z_{2}}\exp (-0.6496) = 0.0455

分类正确样本6、7、8调整后的权重为:

                                                     w = \frac{0.1666}{Z_{2}}\exp (-0.6496) = 0.1060

分类正确样本9调整后的权重为:

                                                     w = \frac{0.0715}{Z_{2}}\exp (-0.6496) = 0.0455。​​​​​

(3)构建第三个弱学习器

由(2)可知第三个弱学习器学习的样本权重为:D_{3} =\left \{ 0.0455, 0.0455, 0.0455, 0.1667, 0.1667, 0.1667, 0.1060, 0.1060, 0.1060, 0.0455\right \}。重复前面过程即可构建第三个弱学习器,具体划分点选择不再介绍,第三个弱学习器为:

                                                     G_{3}(x) = \left\{\begin{matrix} -1, & x<5.5\\ 1,& x\geqslant 5.5 \end{matrix}\right.

则加权错误率为(0、1、2、9错误):e_{3} =0.0455+0.0455+0.0455+0.0455=0.1820,弱学习器权重为:

                                                     \alpha _{3} = \frac{1}{2} \ln \frac{1-e_{3}}{e_{3}}=0.7514

新的样本权重计算方法和新的弱学习器构建过程和前面一样,这里不再赘述。不断在前一个弱学习器的基础上构建新的弱学习器,直到达到指定的基学习器数量或者其他停止条件。

假设我们只构建三个弱学习器,则最终的强学习器模型为:

                                                     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值