AdaBoost自适应提升算法

☞ ░ 前往老猿Python博客 ░ https://blog.youkuaiyun.com/LaoYuanPython

一、一些基本概念

提升方法的思想有点类似“三个臭皮匠赛过诸葛亮”:对于一个复杂的任务来说,多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。

下面介绍与提升方法相关的一些基本概念。

1、强可学习和弱可学习

强可学习(Strongly Learnable)和弱可学习(Weakly Learnable)是Kearns和Valiant提出来的描述学习算法能力的关键概念,也是AdaBoost等集成方法的理论基础。在概率近似正确(probably approximately correct,PAC)学习的框架中:

  • 一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么称这个概念是强可学习的;
  • 一个概念(一个类),如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好(对二分类来说就是概率大于0.5),那么称这个概念是弱可学习的。

2、提升方法的基本思路

对于分类问题而言,给定一个训练样本集,求弱分类器比求强分类器容易很多,提升提升方法的基本思路是:从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器。

大多数提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。

提升方法要解决两个问题:

  • 每一轮训练如何改变训练数据的权值或概率分布?提升方法是将前一轮弱分类器错误分类样本的权值提高,正确分类的样本的权值降低,从而提高错误分类数据在新一轮分类的关注度;
  • 如何将一系列弱分类器组合成强分类器?提升方法是加大组合中分类误差率小的弱分类器的权值,减少分类误差率大的弱分类器权值,使得表决时误差小的弱分类器发挥更多的作用。

AdaBoost(Adaptive Boosting,自适应提升)的基本思路是一种通过迭代调整样本权重和组合弱分类器来构建强分类器的集成学习方法。其核心思想是“关注错误”——每一轮迭代中,算法会增加被前一轮分类器错误分类样本的权重,使得后续模型更专注于这些难样本,最终通过加权投票组合所有弱分类器的结果。

在这里插入图片描述

二、AdaBoost自适应提升算法

输入

  • 训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T = \{(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)},其中 x i ∈ X ⊆ R n x_i \in \mathcal{X} \subseteq \mathbb{R}^n xiXRn y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} yi{1,+1}
  • 迭代次数 M M M

输出

  • 最终分类器 G ( x ) G(x) G(x)

算法步骤

  1. 初始化样本权重
    D 1 = ( w 11 , w 12 , . . . , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , . . . , N D_1 = (w_{11}, w_{12}, ..., w_{1N}), \quad w_{1i} = \frac{1}{N}, \quad i = 1,2,...,N D1=(w11,w12,...,w1N),w1i=N1,i=1,2,...,N

  2. 对于 m = 1 , 2 , . . . , M m = 1, 2, ..., M m=1,2,...,M:使用当前权重分布 D m D_m Dm进行数据训练,学习基本分类器 G m ( x ) G_m(x) Gm(x)

    a. 训练弱分类器
    G m ( x ) : X → { − 1 , + 1 } G_m(x): \mathcal{X} \rightarrow \{-1, +1\} Gm(x):X{1,+1}
    使用当前权重分布 D m D_m Dm 训练得到弱分类器 G m ( x ) G_m(x) Gm(x),但AdaBoost 本身并不规定弱分类器的具体训练方式,而是依赖于用户提供的基学习算法(如决策树、单层决策树等)。

    b. 计算分类误差率
    e m = ∑ i = 1 N P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) = ∑ G m ( x i ) ≠ y i w m i e_m = \sum_{i=1}^N P(G_m(x_i) \neq y_i) = \sum_{i=1}^N w_{mi} I(G_m(x_i) \neq y_i)= \sum_{G_m(x_i) \neq y_i} w_{mi} em=i=1NP(Gm(xi)=yi)=i=1NwmiI(Gm(xi)=yi)=Gm(xi)=yiwmi

    c. 计算分类器 G m ( x ) G_m(x) Gm(x) 权重
    α m = 1 2 ln ⁡ ( 1 − e m e m ) \alpha_m = \frac{1}{2} \ln \left( \frac{1 - e_m}{e_m} \right) αm=21ln(em1em)

    d. 更新样本权重
    w m + 1 , i = w m i Z m exp ⁡ ( − α m y i G m ( x i ) ) , i = 1 , 2 , . . . , N w_{m+1,i} = \frac{w_{mi}}{Z_m} \exp (-\alpha_m y_i G_m(x_i)), \quad i = 1,2,...,N wm+1,i=Zmwmiexp(αmyiGm(xi)),i=1,2,...,N
    其中 Z m Z_m Zm 是归一化因子:
    Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G m ( x i ) ) Z_m = \sum_{i=1}^N w_{mi} \exp (-\alpha_m y_i G_m(x_i)) Zm=i=1Nwmiexp(αmyiGm(xi))

  3. 构建最终分类器
    G ( x ) = sign ( ∑ m = 1 M α m G m ( x ) ) G(x) = \text{sign} \left( \sum_{m=1}^M \alpha_m G_m(x) \right) G(x)=sign(m=1MαmGm(x))

说明

  • I ( ⋅ ) I(\cdot) I() 是指示函数,当条件成立时值为1,否则为0
  • 分类器权重 α m \alpha_m αm e m e_m em 减小而增大,即误差越小的分类器在最终投票时权重越大
  • 样本权重更新会使被错误分类的样本权重增加,正确分类的样本权重减小

三、关于算法中的两个要点说明

3.1、为什么初始化权重为 1 N \frac{1}{N} N1

初始化权重设为 1 N \frac{1}{N} N1 (即所有样本的初始权重相等)是为了体现初始时所有样本的重要性相同,在训练开始时,算法没有任何先验知识来判断哪些样本更难分类,因此平等对待所有样本是最合理的初始选择。这种均匀分布(Uniform Distribution)的初始化方式确保了算法在第一次迭代时不会偏向某些特定样本。这就使得第一步在原始数据上学习到基本分类求 G 1 ( X ) G_1(X) G1(X)

3.2、分类器权重αₘ的推导

提升方法AdaBoost算法弱分类器的权重只与其分类误差率相关,其计算公式简单,但其推导过程在一般介绍的文章中并没有介绍,为此老猿耗费了几天时间,才推演并理解了整个公式的推导过程,其推导与损失函数、导数等知识有关,具体推导过程请参考老猿的付费专栏文章《AdaBoost算法中计算弱分类器Gm(x) 权重的公式是怎么推导出来的?(https://blog.youkuaiyun.com/LaoYuanPython/article/details/148632397)》。

四、小结

本文介绍了AdaBoost自适应提升算法的思路、原理及算法详细过程,并针对该过程中样本数据的初始权重值和弱分类器的权值计算方式进行了展开介绍,有利于各位读者完整理解该算法。

更多人工智能知识学习过程中可能遇到的疑难问题及解决办法请关注专栏《零基础机器学习入门》及付费专栏《机器学习疑难问题集》后续的文章。

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

关于老猿的付费专栏

  1. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.youkuaiyun.com/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录
  4. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取优快云文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值