集成学习之Adaboost算法原理小结

简介:

1. 回顾boosting算法的基本原理

    在集成学习原理小结中,我们已经讲到了boosting算法系列的基本思想,如下图:

    从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。  

    不过有几个具体的问题Boosting算法没有详细说明。

    1)如何计算学习误差率e?

    2) 如何得到弱学习器权重系数 α ?

    3)如何更新样本权重D?

    4) 使用何种结合策略?

    只要是boosting大家族的算法,都要解决这4个问题。那么Adaboost是怎么解决的呢?

2. Adaboost算法的基本思路

    我们这里讲解Adaboost是如何解决上一节这4个问题的。

    假设我们的训练集样本是

T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) }

    训练集的在第k个弱学习器的输出权重为

D ( k ) = ( w k 1 , w k 2 , . . . w k m ) ; w 1 i = 1 m ; i = 1 , 2... m

 

    首先我们看看Adaboost的分类问题。

    分类问题的误差率很好理解和计算。由于多元分类是二元分类的推广,这里假设我们是二元分类问题,输出为{-1,1},则第k个弱分类器 G k ( x ) 在训练集上的加权误差率为

e k = P ( G k ( x i ) ≠ y i ) = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i )

    接着我们看弱学习器权重系数,对于二元分类问题,第k个弱分类器 G k ( x ) 的权重系数为

α k = 1 2 l o g 1 − e k e k

    为什么这样计算弱学习器权重系数?从上式可以看出,如果分类误差率 e k 越大,则对应的弱分类器权重系数 α k 越小。也就是说,误差率小的弱分类器权重系数越大。具体为什么采用这个权重系数公式,我们在讲Adaboost的损失函数优化时再讲。

    第三个问题,更新更新样本权重D。假设第k个弱分类器的样本集权重系数为 D ( k ) = ( w k 1 , w k 2 , . . . w k m ) ,则对应的第k+1个弱分类器的样本集权重系数为

w k + 1 , i = w k i Z K e x p ( − α k y i G k ( x i ) )

    这里 Z k 是规范化因子

Z k = ∑ i = 1 m w k i e x p ( − α k y i G k ( x i ) )

    从 w k + 1 , i 计算公式可以看出,如果第i个样本分类错误,则 y i G k ( x i ) < 0 ,导致样本的权重在第k+1个弱分类器中增大,如果分类正确,则权重在第k+1个弱分类器中减少.具体为什么采用样本权重更新公式,我们在讲Adaboost的损失函数优化时再讲。

    最后一个问题是集合策略。Adaboost分类采用的是加权平均法,最终的强分类器为

f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x ) )

    

    接着我们看看Adaboost的回归问题。由于Adaboost的回归问题有很多变种,这里我们以Adaboost R2算法为准。

    我们先看看回归问题的误差率的问题,对于第k个弱学习器,计算他在训练集上的最大误差

E k = m a x | y i − G k ( x i ) | i = 1 , 2... m

    然后计算每个样本的相对误差

e k i = | y i − G k ( x i ) | E k

    这里是误差损失为线性时的情况,如果我们用平方误差,则 e k i = ( y i − G k ( x i ) ) 2 E k 2 ,如果我们用的是指数误差,则 e k i = 1 − e x p ( − y i + G k ( x i ) ) E k )

    最终得到第k个弱学习器的 误差率

e k = ∑ i = 1 m w k i e k i

    我们再来看看如何得到弱学习器权重系数 α 。这里有:

α k = e k 1 − e k

    对于更新更新样本权重D,第k+1个弱学习器的样本集权重系数为

w k + 1 , i = w k i Z k α k 1 − e k i

    这里 Z k 是规范化因子

Z k = ∑ i = 1 m w k i α k 1 − e k i

    最后是结合策略,和分类问题一样,采用的也是加权平均法,最终的强回归器为

f ( x ) = ∑ k = 1 K ( l n 1 α k ) G k ( x )

3. AdaBoost分类问题的损失函数优化

    刚才上一节我们讲到了分类Adaboost的弱学习器权重系数公式和样本权重更新公式。但是没有解释选择这个公式的原因,让人觉得是魔法公式一样。其实它可以从Adaboost的损失函数推导出来。

    从另一个角度讲, Adaboost是模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题。

    模型为加法模型好理解,我们的最终的强分类器是若干个弱分类器加权平均而得到的。

    前向分步学习算法也好理解,我们的算法是通过一轮轮的弱学习器学习,利用前一个弱学习器的结果来更新后一个弱学习器的训练集权重。也就是说,第k-1轮的强学习器为

f k − 1 ( x ) = ∑ i = 1 k − 1 α i G i ( x )

    而第k轮的强学习器为

f k ( x ) = ∑ i = 1 k α i G i ( x )

    上两式一比较可以得到

f k ( x ) = f k − 1 ( x ) + α k G k ( x )

    可见强学习器的确是通过前向分步学习算法一步步而得到的。

    Adaboost损失函数为指数函数,即定义损失函数为

a r g m i n ⏟ α , G ∑ i = 1 m e x p ( − y i f k ( x ) )

    利用前向分步学习算法的关系可以得到损失函数为

( α k , G k ( x ) ) = a r g m i n ⏟ α , G ∑ i = 1 m e x p [ ( − y i ) ( f k − 1 ( x ) + α G ( x ) ) ]

    令 w k i ′ = e x p ( − y i f k − 1 ( x ) ) , 它的值不依赖于 α , G ,因此与最小化无关,仅仅依赖于 f k − 1 ( x ) ,随着每一轮迭代而改变。

    将这个式子带入损失函数,损失函数转化为

( α k , G k ( x ) ) = a r g m i n ⏟ α , G ∑ i = 1 m w k i ′ e x p [ − y i α G ( x ) ]

    首先,我们求 G k ( x ) .,可以得到

G k ( x ) = a r g m i n ⏟ G ∑ i = 1 m w k i ′ I ( y i ≠ G ( x i ) )

    将 G k ( x ) 带入损失函数,并对 α 求导,使其等于0,则就得到了

α k = 1 2 l o g 1 − e k e k

    其中, e k 即为我们前面的分类误差率。

e k = ∑ i = 1 m w k i ′ I ( y i ≠ G ( x i ) ) ∑ i = 1 m w k i ′ = ∑ i = 1 m w k i I ( y i ≠ G ( x i ) )

    最后看样本权重的更新。利用 f k ( x ) = f k − 1 ( x ) + α k G k ( x ) 和 w k i ′ = e x p ( − y i f k − 1 ( x ) ) ,即可得:

w k + 1 , i ′ = w k i ′ e x p [ − y i α k G k ( x ) ]

    这样就得到了我们第二节的样本权重更新公式。

4. AdaBoost二元分类问题算法流程

    这里我们对AdaBoost二元分类问题算法流程做一个总结。

    输入为样本集 T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } ,输出为{-1, +1},弱分类器算法, 弱分类器迭代次数K。

    输出为最终的强分类器 f ( x )

    1) 初始化样本集权重为

D ( 1 ) = ( w 11 , w 12 , . . . w 1 m ) ; w 1 i = 1 m ; i = 1 , 2... m

    2) 对于k=1,2,...K:

      a) 使用具有权重 D k 的样本集来训练数据,得到弱分类器 G k ( x )

      b)计算 G k ( x ) 的分类误差率

e k = P ( G k ( x i ) ≠ y i ) = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i )

      c) 计算弱分类器的系数

α k = 1 2 l o g 1 − e k e k

      d) 更新样本集的权重分布

w k + 1 , i = w k i Z K e x p ( − α k y i G k ( x i ) ) i = 1 , 2 , . . . m

        这里 Z k 是规范化因子

Z k = ∑ i = 1 m w k i e x p ( − α k y i G k ( x i ) )

    3) 构建最终分类器为:

f ( x ) = s i g n ( ∑ k = 1 K α k G k ( x ) )

 

    对于Adaboost多元分类算法,其实原理和二元分类类似,最主要区别在弱分类器的系数上。比如Adaboost SAMME算法,它的弱分类器的系数

α k = 1 2 l o g 1 − e k e k + l o g ( R − 1 )

    其中R为类别数。从上式可以看出,如果是二元分类,R=2,则上式和我们的二元分类算法中的弱分类器的系数一致。

5. Adaboost回归问题的算法流程

    这里我们对AdaBoost回归问题算法流程做一个总结。AdaBoost回归算法变种很多,下面的算法为Adaboost R2回归算法过程。

    输入为样本集 T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } ,,弱学习器算法, 弱学习器迭代次数K。

    输出为最终的强学习器 f ( x )

    1) 初始化样本集权重为

D ( 1 ) = ( w 11 , w 12 , . . . w 1 m ) ; w 1 i = 1 m ; i = 1 , 2... m

    2) 对于k=1,2,...K:

      a) 使用具有权重 D k 的样本集来训练数据,得到弱学习器 G k ( x )

      b) 计算训练集上的最大误差

E k = m a x | y i − G k ( x i ) | i = 1 , 2... m

      c) 计算每个样本的相对误差:

        如果是线性误差,则 e k i = | y i − G k ( x i ) | E k ;

        如果是平方误差,则 e k i = ( y i − G k ( x i ) ) 2 E k 2

        如果是指数误差,则 e k i = 1 − e x p ( − y i + G k ( x i ) ) E k )         

      d) 计算回归误差率

e k = ∑ i = 1 m w k i e k i

      c) 计算弱学习器的系数

α k = e k 1 − e k

      d) 更新样本集的权重分布为

w k + 1 , i = w k i Z k α k 1 − e k i

        这里 Z k 是规范化因子

Z k = ∑ i = 1 m w k i α k 1 − e k i

    3) 构建最终强学习器为:

f ( x ) = ∑ k = 1 K ( l n 1 α k ) G k ( x )

6. Adaboost算法的正则化

    为了防止Adaboost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。定义为 ν ,对于前面的弱学习器的迭代

f k ( x ) = f k − 1 ( x ) + α k G k ( x )

    如果我们加上了正则化项,则有

f k ( x ) = f k − 1 ( x ) + ν α k G k ( x )

     ν 的取值范围为 0 < ν ≤ 1 。对于同样的训练集学习效果,较小的 ν 意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。

7. Adaboost小结

    到这里Adaboost就写完了,前面有一个没有提到,就是弱学习器的类型。理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。

    这里对Adaboost算法的优缺点做一个总结。

    Adaboost的主要优点有:

    1)Adaboost作为分类器时,分类精度很高

    2)在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。

    3)作为简单的二元分类器时,构造简单,结果可理解。

    4)不容易发生过拟合

    Adaboost的主要缺点有:

    1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。


本文转自刘建平Pinard博客园博客,原文链接:http://www.cnblogs.com/pinard/p/6133937.html,如需转载请自行联系原作者


相关文章
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
428 0
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
1217 3
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
464 1
|
算法 数据可视化 开发者
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
3287 11
架构学习:7种负载均衡算法策略
|
算法 数据安全/隐私保护
基于Adaboost的数据分类算法matlab仿真
本程序基于Adaboost算法进行数据分类的Matlab仿真,对比线性与非线性分类效果。使用MATLAB2022A版本运行,展示完整无水印结果。AdaBoost通过迭代训练弱分类器并赋予错分样本更高权重,最终组合成强分类器,显著提升预测准确率。随着弱分类器数量增加,训练误差逐渐减小。核心代码实现详细,适合研究和教学使用。
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
721 0
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
1842 6