当前位置: 代码迷 >> 综合 >> 机器篇——集成学习(四) 细说 AdaBoost 算法
  详细解决方案

机器篇——集成学习(四) 细说 AdaBoost 算法

热度:49   发布时间:2023-12-15 09:03:17.0

 

返回主目录

返回集成学习目录

上一章:机器篇——集成学习(三) 细说 提升(Boosting) 算法

下一章:机器篇——集成学习(五) 细说 梯度提升(Gradient Boost)算法 

 

本小节,细说 AdaBoost 算法,下一小节细说 梯度提升(Gradient Boost) 算法

 

二. 具体算法

4. AdaBoost 算法

    AdaBoost 是 Boosting 特定损失函数的算法

    (1). AdaBoost 算法的基本思路

     ①. 开始时,所有样本权重相同,训练得到第一个基分类器。

     ②. 从第二轮开始,每轮开始前都会根据上一轮基分类器的分类效果调整每个样本的权重,上一轮分错的样本权重提高,分对的样本权重降低

     ③. 之后根据新得到样本的权重指导本轮中的基分类器训练,即在考虑样本不同权重的情况下得到本轮错误率最低的基分类器。

     ④. 重复以上步骤直至训练到约定的轮数结束,每一轮训练得到一个基分类器

 

    (2). AdaBoost 算法的实现

     ①. 若为 AdaBoost 分类,函数模型使用 CART 分类树

           若为 AdaBoost 回归,函数模型使用 CART 回归树

     ②. 损失函数为:指数损失函数

     ③. 调整训练集:使用加权后选取的训练数据代替随机选取的训练样本,这样将训练的焦点集中在比较难分的训练数据样本上。

           联合弱分类器:将弱分类器联合起来,使用加权的投票机制代替平均投票机制。让分类效果好的分类器具有较大的权重,而分类效果差的分类器具有较小的权重。

 

    (3). AdaBoost 权重更新规则

     ①. 样本权重更新

           对于分类错误的样本,加大其对应的权重;而对于分类正确的样本,降低其权重。这样分错的样本就被突显出来,从而得到一个新的样本分布

     ②. 弱分类器权值更新

           对于准确率较高的弱分类器,加大其权重;对于准确率较低的弱分类器,减小其权重。

     

    (4). AdaBoost 算法过程

     将样本权值被更新过的新数据集送给下一层弱分类器进行训练,最后将每次训练得到的弱分类器根据弱分类器权重融合起来,从而得到强分类器

     ①. 给定训练样本集 ,其中  和  分别对应于正例样本和负例样本; 为训练的最大循环次数。

     ②. 初始化样本权重为 ,即为训练样本的初始概率分布。

     ③. 第一次迭代:

      a. 训练样本的概率分布相当,训练弱分类器

      b. 计算弱分类器的错误率

      c. 选取合适阈值,使得误差最小

      d. 更行样本权重

     ④. 经过  次循环后,得到  个弱分类器,按更新的弱分类器权重叠加,最终得到强分类器。

 

    (5). AdaBoost 分类问题的损失函数优化

     ①. 由分类 AdaBoost 的损失函数,推导出分类 AdaBoost 的弱学习器权重系数公式和样本权重更新公式

     ②. 分类 AdaBoost 的模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题

     ③. 加法模型

           最终的强分类器是若干个弱分类器加权平均而得到

     ④. 前向分步学习

           通过一轮轮的弱学习,利用前一个弱学习器的结果来更新后一个弱学习器的训练集权重

      a. 第  轮的强学习器为:

              

      b. 第  轮的强学习器为:

              

      b. 上两式前向学习可以得到:

              

        由弱学习器不断迭代前向学习算法,一步步得到强学习器。

     ⑤. 分类 AdaBoost 的损失函数为指数函数,即定义损失函数为:

              

      a. 令 ,它的值不依赖于 ,因此与最小化无关,仅仅依赖于 ,随着每一轮迭代而改变。

      b. 将  代入损失函数,则

                

         可以得到

                 

      c. 将  代入损失函数,并对  求导,使其等于 0,则

                 

                 :分类误差率

                            

      d. 由  和  可得

                

          这样,便得到了样本权重更新公式。

 

    (6). AdaBoost 二元分类算法

     输入为样本集 

     输出为 ,弱分类器算法,弱分类器迭代次数 

     输出为最终的强分类器 

     ①. 初始化样本集权重为:

             

                  

     ②. 训练  个弱分类器,;

      a. 使用具有权重  的样本来训练数据,得到弱分类器 

      b. 计算  的分类误差率

              

      c. 计算弱分类器的系数

               

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

                            

                :为规范因子,

     ③. 构建最终分类器

                

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

               

               :为类别数,如果是二元分类,则 ,这样,上式和二元分类算法中的弱分类器的系数一致。

 

    (7). AdaBoost 回归算法流程

     输入为样本集 

     输出为最终的强学习器 

     流程:

     ①. 初始化样本集权重为:

             

                  

     ②. 训练  个弱分类器,;

      a. 使用具有权重  的样本来训练数据,得到弱分类器 

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

                       

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

           如果是线性误差,则

                     

           如果是平方误差,则

                     

           如果是指数误差,则

                     

      d. 计算回归误差率

                     

      e. 计算弱学习器的系数

                     ???????

      f. 更新样本集的权重分布

                     ???????

                      :为规范因子, 

     ③. 构建最终强学习器

                 

                 :为所有  的中位数

     

    (8). AdaBoost 算法的正则化

    为了防止 AdaBoost 过拟合,通常会加入正则项,这个正则化项通常被称为学习率(learning rate)。定义为 ,对于前面的弱学习器的迭代:

              

    如果加上正则化项,则有:

               

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

 

    (9). AdaBoost 算法的优缺点

     ①. 优点

      a. AdaBoost 作为分类器时,分类精度很高

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

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

      d. 不容易发生过拟合。

     ②. 缺点

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

      b. 模型无法用于概率估计。

          对于取值为  的随机变量来说, 不是任何概率密度函数的对数形式,模型  的结果无法用概率解释。

 

    (10). 代码演示

       AdaBoost 代码演示,其实和 RF 的类似。都是调用集成在 sklearn 的方法,然后,调参。具体可以参考机器篇——集成学习(三)里面的 RF 代码。

"""
Adaboost调参:
class sklearn.ensemble.AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm=’SAMME’, random_state=None)
推荐调节的参数:base_estimator,(n_estimators,learning_rate):缩小每个基分类器的贡献
"""

效果,就不演示了。

 

 

 

 

 

 

                 

 

 

返回主目录

返回集成学习目录

上一章:机器篇——集成学习(三) 细说 提升(Boosting) 算法

下一章:机器篇——集成学习(五) 细说 梯度提升(Gradient Boost)算法