sklearn adaboost_集成学习(Ensemble Learning)——AdaBoost(2)

1ba44b69b9321d231e0bffbb935fb3c7.png

上一篇文章给大家介绍了Bagging算法族和随机森林算法,需要的朋友可以自行跳转阅读:

周明:集成学习(Ensemble Learning)(1)​zhuanlan.zhihu.com
17507c2182022d68716483bfc22c98c3.png

本文给大家介绍集成学习的另一分支Boosting算法族,及其代表算法AdaBoost~

2、Boosting(提升)算法族介绍

与Bagging相比,Boosting属于「序列化算法」,通过迭代训练的方式降低上一个基学习器(弱学习器)的偏差(通过更加关注上一个基学习器预测错误的样本,并忽略正确预测的样本实现),然后将训练好的弱学习器通过加法模型线性组合为强学习器。

f674a062ef8e1eb2a1aed474e4a989bd.png
图2-1 Boosting算法框架

Boosting算法族的两个核心问题:

  1. 迭代训练过程中如何降低模型的偏差?
  2. 如何将训练好的弱学习器组合为强学习器?

下面我们将通过解决这两个核心问题,分别了解下AdaBoost、提升树(Boosting Tree)、梯度提升树(GBDT)和XGBoost。

2.1 AdaBoost(Adaptive Boosting,自适应boosting)

AdaBoost算法是Boosting算法的典型代表,它是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二分类算法

它对两个核心问题的回答是:

  1. 迭代训练过程中如何降低模型的偏差?

答: AdaBoost算法通过更新附加给训练集的每个样本的权重来降低模型的偏差。具体描述为:每一轮训练弱学习器时,通过增加上一轮预测错误样本的权重,并降低上一轮预测正确样本的权重来让模型更关注预测错误的样本,从而最小化整体模型的拟合偏差。

  1. 如何将训练好的弱学习器组合为强学习器?

AdaBoost通过加权多数表决的方法实现聚合多个弱学习器为强学习器。具体描述为:通过给预测误差小的学习器更大的权重,和给预测误差大的学习器更小的权重,来让预测错误率更小的学习器对整体预测结果贡献更大,从而降低整体模型的偏差。

对于二分类问题,AdaBoost算法流程描述如下:

06236e830503ed0838490fad66ad433b.png
图2-2 AdaBoost算法流程

数据集中有m个观测数据,我们想在给定一组弱模型的情况下使用AdbBoost算法。在算法的起始阶段(序列中的第一个模型),所有的观测数据都拥有相同的权重1/m。然后,我们将下面的步骤重复 T 次(作用于序列中的 T 个学习器):

(1)用当前观测数据的权重

拟合出最佳基学习器

(2)计算本轮迭代的预测错误率

,并且当
时,终止迭代,直接返回。

(3)计算本轮基学习器的权重系数

,它表示
的重要性,与预测错误率
成负相关,即该学习器预测错误率越低,权重系数
越大,反之亦然。

(4)更新观测数据的权重为

1.)当

时,
,表示在上一轮基础上提升该观测样本的权重。

2.)当

时,
,表示在上一轮基础上降低该观测样本的权重。

重复执行(1)-(4),我们顺序地构建出T个模型,然后将T个模型加权求和得到强学习器 :

2.1.1 举例解释AdaBoost

例题:给定如表2-1所示的训练数据。假设弱分类器由x<v或x>v产生,其分类阈值v使该分类器在训练数据集上分类误差率最低。请用AdbBoost学习一个强分类器。

a8a2f90787370c66ee885c5b95fe2f3e.png
表2-1 训练数据

下面开始推演训练过程:

(1)初始化算法参数(初始化数据权值分布):

ed3261766c91d539e29cee7e677b5f15.png
表2-2 初始化算法参数

(2)对于迭代次数t=1时:

1.)在权值分布为

时,阈值v=2.5分类误差率最低为
(因为样本序号为7,8,9的样本被错误分类,同时分类误差率为该弱分类器被错误分类样本的权值之和)。故基本分类器为:

19496744b0e88292224691fcff55e841.png

分类误差率为:

注:此处需判断

是否成立,如果成立则终止训练并返回,反之亦然。因为
,则算法继续执行。

2.)根据分类误差率

可以得出
的权重系数为:

注:权重系数

表示基分类器
在最终的加权多数表决中的权重。

3.)更新训练数据的权值分布:

对于错误分类的样本(序号为7,8,9的样本)权值更新为

对于正确分类的样本(排除序号为7,8,9的其他样本)权值更新为

8be548024f5d1dcbac03eb263501696a.png
表2-3 第一轮训练成果

注:序号为7,8,9的样本因为在第一轮训练中被错误分类,所以权值从0.1提升为0.16667;反之其他被正确分类的样本权值从0.1降低为0.07143。

第一轮训练成果:分类函数

,此时组合一个基分类器为强分类器
,并且其在训练数据集上有三个误分类点(序号为7,8,9的三个样本点)。

思考:由上面分析可知,错误分类样本的权值之和为本轮误差率,由可计算得到该基分类器的权重系数,进而可以根据和错误分类情况计算出下一轮训练的权值分布,达到迭代降低错误分类的效果。

(3)对于迭代次数t=2时:

1.)在权值分布为

时,阈值v=8.5分类误差率最低为
(因为样本序号为4,5,6的样本被错误分类,同时分类误差率为该弱分类器被错误分类样本的权值之和)。故基本分类器为:

ceb4ffa8cfceb6a04a0f0d2eda3e4e88.png

分类误差率为:

同样,此时

,算法继续执行。

2.)根据分类误差率

可以得出
的权重系数为:

注:因为

,故第二轮训练得到的权重系数大于第一轮训练得到的权重系数(即
)。

3.)更新训练数据的权值分布:

对于错误分类的样本(序号为4,5,6的样本)权值更新为

对于正确分类的样本(排除序号为4,5,6的其他样本)权值更新为

ffb65a3db21fc55789a7db455012ee28.png

5238ce896aebd6311f6b93e130fb22fb.png
表2-4 第二轮训练成果

注:序号为4,5,6的样本因为在第二轮训练中被错误分类,所以权值从0.07143提升为0.1667;反之其他被正确分类的样本权值被降低。

第二轮训练成果:分类函数

,此时组合两个基分类器为强分类器
,并且其在训练数据集上有三个误分类点(序号为4,5,6的三个样本点)。

(4)对于迭代次数t=3时:

1.)在权值分布为

时,阈值v=5.5分类误差率最低为
(因为样本序号为1,2,3,10的样本被错误分类,同时分类误差率为该弱分类器被错误分类样本的权值之和)。

故基本分类器为:

a9a08e097d6f8b767c3741c75c6699ea.png

分类误差率为:

同样,此时

,算法继续执行。

2.)根据分类误差率

可以得出
的权重系数为:

注:此处虽然分类错误样本数为4个,但是样本序号为1,2,3,10的样本在之前训练中已被正确分类,故样本权值会比较低。计算得到

,故第三轮训练得到的权重系数大于第一、二轮训练得到的权重系数(即
)。

3.)更新训练数据的权值分布:

对于错误分类的样本(序号为1,2,3,10的样本)权值更新为

对于正确分类的样本(排除序号为1,2,3,10的其他样本)权值更新为

ef3964fe3c2a5147513bdd32fa6e6e0c.png

64972351a87639f3827d81680e171553.png
表2-5 第三轮训练成果

第三轮训练成果:分类函数

,此时组合三个基分类器为强分类器
,并且其在训练数据集上有0个误分类点,至此训练结束,最终的强分类器为:

2.1.2 代码实现AdaBoost(使用sklearn实现)

2845e2733eb2e4284cc51fca873f1eb9.png
图2-3 AdaBoost算法sklearn实现

感谢阅读,如果你感觉本文能帮到你,欢迎点赞、评论和收藏本文,鄙人会再接再厉,为您带来更多机器学习相关的知识分享~

下一篇将给大家介绍提升树(Boosting Tree),希望继续关注。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值