task9

  1. 导论
    在前面的学习中,我们探讨了一系列简单而实用的回归和分类模型,同时也探讨了如何使用集成学习家族中的Bagging思想去优化最终的模型。Bagging思想的实质是:通过Bootstrap 的方式对全样本数据集进行抽样得到抽样子集,对不同的子集使用同一种基本模型进行拟合,然后投票得出最终的预测。我们也从前面的探讨知道:Bagging主要通过降低方差的方式减少预测误差。那么,本章介绍的Boosting是与Bagging截然不同的思想,Boosting方法是使用同一组数据集进行反复学习,得到一系列简单模型,然后组合这些模型构成一个预测性能十分强大的机器学习模型。显然,Boosting思想提高最终的预测效果是通过不断减少偏差的形式,与Bagging有着本质的不同。在Boosting这一大类方法中,笔者主要介绍两类常用的Boosting方式:Adaptive Boosting 和 Gradient Boosting 以及它们的变体Xgboost、LightGBM以及Catboost。

  2. Boosting方法的基本思路
    在正式介绍Boosting思想之前,我想先介绍两个例子:
    第一个例子:不知道大家有没有做过错题本,我们将每次测验的错的题目记录在错题本上,不停的翻阅,直到我们完全掌握(也就是能够在考试中能够举一反三)。
    第二个例子:对于一个复杂任务来说,将多个专家的判断进行适当的综合所作出的判断,要比其中任何一个专家单独判断要好。实际上这是一种“三个臭皮匠顶个诸葛亮的道理”。
    这两个例子都说明Boosting的道理,也就是不错地重复学习达到最终的要求。
    Boosting的提出与发展离不开Valiant和 Kearns的努力,历史上正是Valiant和 Kearns提出了"强可学习"和"弱可学习"的概念。那什么是"强可学习"和"弱可学习"呢?在概率近似正确PAC学习的框架下:

弱学习:识别错误率小于1/2(即准确率仅比随机猜测略高的学习算法)
强学习:识别准确率很高并能在多项式时间内完成的学习算法
非常有趣的是,在PAC 学习的框架下,强可学习和弱可学习是等价的,也就是说一个概念是强可学习的充分必要条件是这个概念是弱可学习的。这样一来,问题便是:在学习中,如果已经发现了弱可学习算法,能否将他提升至强可学习算法。因为,弱可学习算法比强可学习算法容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后通过一定的形式去组合这些弱分类器构成一个强分类器。大多数的Boosting方法都是通过改变训练数据集的概率分布(训练数据不同样本的权值),针对不同概率分布的数据调用弱分类算法学习一系列的弱分类器。
对于Boosting方法来说,有两个问题需要给出答案:第一个是每一轮学习应该如何改变数据的概率分布,第二个是如何将各个弱分类器组合起来。关于这两个问题,不同的Boosting算法会有不同的答案,我们接下来介绍一种最经典的Boosting算法----Adaboost,我们需要理解Adaboost是怎么处理这两个问题以及为什么这么处理的。

  1. Adaboost算法
    Adaboost的基本原理

对于Adaboost来说,解决上述的两个问题的方式是:1. 提高那些被前一轮分类器错误分类的样本的权重,而降低那些被正确分类的样本的权重。这样一来,那些在上一轮分类器中没有得到正确分类的样本,由于其权重的增大而在后一轮的训练中“备受关注”。2. 各个弱分类器的组合是通过采取加权多数表决的方式,具体来说,加大分类错误率低的弱分类器的权重,因为这些分类器能更好地完成分类任务,而减小分类错误率较大的弱分类器的权重,使其在表决中起较小的作用。
现在,我们来具体介绍Adaboost算法:(参考李航老师的《统计学习方法》)
假设给定一个二分类的训练数据集:𝑇={(𝑥1,𝑦1),(𝑥2,𝑦2),⋯,(𝑥𝑁,𝑦𝑁)},其中每个样本点由特征与类别组成。特征𝑥𝑖∈⊆𝐑𝑛,类别𝑦𝑖∈={−1,+1},是特征空间,是类别集合,输出最终分类器𝐺(𝑥)。Adaboost算法如下:
(1) 初始化训练数据的分布:𝐷1=(𝑤11,⋯,𝑤1𝑖,⋯,𝑤1𝑁),𝑤1𝑖=1𝑁,𝑖=1,2,⋯,𝑁
(2) 对于m=1,2,…,M

使用具有权值分布𝐷𝑚的训练数据集进行学习,得到基本分类器:𝐺𝑚(𝑥):→{−1,+1}
计算𝐺𝑚(𝑥)在训练集上的分类误差率𝑒𝑚=∑𝑁𝑖=1𝑃(𝐺𝑚(𝑥𝑖)≠𝑦𝑖)=∑𝑁𝑖=1𝑤𝑚𝑖𝐼(𝐺𝑚(𝑥𝑖)≠𝑦𝑖)
计算𝐺𝑚(𝑥)的系数𝛼𝑚=12log1−𝑒𝑚𝑒𝑚,这里的log是自然对数ln
更新训练数据集的权重分布
𝐷𝑚+1=(𝑤𝑚+1,1,⋯,𝑤𝑚+1,𝑖,⋯,𝑤𝑚+1,𝑁)𝑤𝑚+1,𝑖=𝑤𝑚𝑖𝑍𝑚exp(−𝛼𝑚𝑦𝑖𝐺𝑚(𝑥𝑖)),𝑖=1,2,⋯,𝑁

这里的𝑍𝑚是规范化因子,使得𝐷𝑚+1称为概率分布,𝑍𝑚=∑𝑁𝑖=1𝑤𝑚𝑖exp(−𝛼𝑚𝑦𝑖𝐺𝑚(𝑥𝑖))
(3) 构建基本分类器的线性组合𝑓(𝑥)=∑𝑀𝑚=1𝛼𝑚𝐺𝑚(𝑥),得到最终的分类器

𝐺(𝑥)=sign(𝑓(𝑥))=sign(∑𝑚=1𝑀𝛼𝑚𝐺𝑚(𝑥))
下面对Adaboost算法做如下说明:
对于步骤(1),假设训练数据的权值分布是均匀分布,是为了使得第一次没有先验信息的条件下每个样本在基本分类器的学习中作用一样。
对于步骤(2),每一次迭代产生的基本分类器𝐺𝑚(𝑥)在加权训练数据集上的分类错误率𝑒𝑚=∑𝑖=1𝑁𝑃(𝐺𝑚(𝑥𝑖)≠𝑦𝑖)=∑𝐺𝑚(𝑥𝑖)≠𝑦𝑖𝑤𝑚𝑖代表了在𝐺𝑚(𝑥)中分类错误的样本权重和,这点直接说明了权重分布𝐷𝑚与𝐺𝑚(𝑥)的分类错误率𝑒𝑚有直接关系。同时,在步骤(2)中,计算基本分类器𝐺𝑚(𝑥)的系数𝛼𝑚,𝛼𝑚=12log1−𝑒𝑚𝑒𝑚,它表示了𝐺𝑚(𝑥)在最终分类器的重要性程度,𝛼𝑚的取值由基本分类器𝐺𝑚(𝑥)的分类错误率有直接关系,当𝑒𝑚⩽12时,𝛼𝑚⩾0,并且𝛼𝑚随着𝑒𝑚的减少而增大,因此分类错误率越小的基本分类器在最终分类器的作用越大!
*最重要的,对于步骤(2)中的样本权重的更新: *
𝑤𝑚+1,𝑖={𝑤𝑚𝑖𝑍𝑚e−𝛼𝑚,𝑤𝑚𝑖𝑍𝑚e𝛼𝑚,𝐺𝑚(𝑥𝑖)=𝑦𝑖𝐺𝑚(𝑥𝑖)≠𝑦𝑖

因此,从上式可以看到:被基本分类器𝐺𝑚(𝑥)错误分类的样本的权重扩大,被正确分类的样本权重减少,二者相比相差e2𝛼𝑚=1−𝑒𝑚𝑒𝑚倍。
对于步骤(3),线性组合𝑓(𝑥)实现了将M个基本分类器的加权表决,系数𝛼𝑚标志了基本分类器𝐺𝑚(𝑥)的重要性,值得注意的是:所有的𝛼𝑚之和不为1。𝑓(𝑥)的符号决定了样本x属于哪一类。

下面,我们使用一组简单的数据来手动计算Adaboost算法的过程:(例子来源:http://www.csie.edu.tw)

训练数据如下表,假设基本分类器的形式是一个分割𝑥<𝑣或𝑥>𝑣表示,阈值v由该基本分类器在训练数据集上分类错误率𝑒𝑚最低确定。
序号 𝑥𝑦10121132143−154−165−1761871981109−1

解:
初始化样本权值分布
𝐷1𝑤1𝑖=(𝑤11,𝑤12,⋯,𝑤110)=0.1,𝑖=1,2,⋯,10

对m=1:

在权值分布𝐷1的训练数据集上,遍历每个结点并计算分类误差率𝑒𝑚,阈值取v=2.5时分类误差率最低,那么基本分类器为:
𝐺1(𝑥)={1,−1,𝑥<2.5𝑥>2.5
𝐺1(𝑥)在训练数据集上的误差率为𝑒1=𝑃(𝐺1(𝑥𝑖)≠𝑦𝑖)=0.3。
计算𝐺1(𝑥)的系数:𝛼1=12log1−𝑒1𝑒1=0.4236
更新训练数据的权值分布:
𝐷2=𝑤2𝑖=𝐷2=𝑓1(𝑥)(𝑤21,⋯,𝑤2𝑖,⋯,𝑤210)𝑤1𝑖𝑍1exp(−𝛼1𝑦𝑖𝐺1(𝑥𝑖)),𝑖=1,2,⋯,10(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,0.16667,0.16667,0.16667,0.07143)=0.4236𝐺1(𝑥)
对于m=2:

在权值分布𝐷2的训练数据集上,遍历每个结点并计算分类误差率𝑒𝑚,阈值取v=8.5时分类误差率最低,那么基本分类器为:
𝐺2(𝑥)={1,−1,𝑥<8.5𝑥>8.5
𝐺2(𝑥)在训练数据集上的误差率为𝑒2=0.2143
计算𝐺2(𝑥)的系数:𝛼2=0.6496
更新训练数据的权值分布:
𝐷3=𝑓2(𝑥)(0.0455,0.0455,0.0455,0.1667,0.1667,0.16670.1060,0.1060,0.1060,0.0455)=0.4236𝐺1(𝑥)+0.6496𝐺2(𝑥)
对m=3:

在权值分布𝐷3的训练数据集上,遍历每个结点并计算分类误差率𝑒𝑚,阈值取v=5.5时分类误差率最低,那么基本分类器为:
𝐺3(𝑥)={1,−1,𝑥>5.5𝑥<5.5
𝐺3(𝑥)在训练数据集上的误差率为𝑒3=0.1820
计算𝐺3(𝑥)的系数:𝛼3=0.7514
更新训练数据的权值分布:
𝐷4=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.065,0.125)
于是得到:𝑓3(𝑥)=0.4236𝐺1(𝑥)+0.6496𝐺2(𝑥)+0.7514𝐺3(𝑥),分类器sign[𝑓3(𝑥)]在训练数据集上的误分类点的个数为0。
于是得到最终分类器为:𝐺(𝑥)=sign[𝑓3(𝑥)]=sign[0.4236𝐺1(𝑥)+0.6496𝐺2(𝑥)+0.7514𝐺3(𝑥)]
下面,我们使用sklearn对Adaboost算法进行建模:

本次案例我们使用一份UCI的机器学习库里的开源数据集:葡萄酒数据集,该数据集可以在 ( https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data )上获得。该数据集包含了178个样本和13个特征,从不同的角度对不同的化学特性进行描述,我们的任务是根据这些数据预测红酒属于哪一个类别。(案例来源《python机器学习(第二版》)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值