AdaBoost算法详解及python实现Python机器学习系列(十八)

Posted 侯小啾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AdaBoost算法详解及python实现Python机器学习系列(十八)相关的知识,希望对你有一定的参考价值。

文章目录


1. AdaBoost 算法简介

Boosting是机器学习的三大框架之一,其特点是,训练过程中的诸多弱模型,彼此之间有着强依赖关系。Boost也被称为增强学习或提升法。典型的代表算法是AdaBoost算法。AdaBoost算法的核心思想是:将关注点放在预测错误的样本上。

AdaBoost 算法可以概括如下:

①假设共有m个样本数据,首先根据需求划分好训练集数据,按照一般思路,训练出第一个弱模型 G 1 ( x ) G_1(x) G1(x)

②对第一个弱模型 G 1 ( x ) G_1(x) G1(x),计算该弱模型的分类错误率(或者说带权错误率,但是因为第一次迭代训练是均等权重的,所以第一次迭代的带权错误率等于普通的分类错误率)。
通过计算的分类错误率来确定该弱模型的权重,并更新训练集数据的权值分布。
(这里涉及两个权重不要弄混,先是模型权重,再是样本数据权重)
记模型 G 1 ( x ) G_1(x) G1(x)的权重为 α 1 \\alpha_1 α1,则 F 1 ( x ) = 0 + α 1 G 1 ( x ) F_1(x)=0+\\alpha_1G_1(x) F1(x)=0+α1G1(x)(因为是第一次迭代,所以上一次可以暂记为0)。

③开始第二次迭代,使用更新后的样本权重再次训练一个弱模型,然后将该弱模型与上一次训练的弱模型 G 2 ( x ) G_2(x) G2(x),按照一定的规则得到的模型权重进行复合, F 2 ( x ) = F 1 ( x ) + α 2 G 2 ( x ) F_2(x)=F_1(x) + \\alpha_2 G_2(x) F2(x)=F1(x)+α2G2(x)
遂得到模型 F 2 ( x ) F_2(x) F2(x)
这里的重点,就在于 α 1 , α 2 \\alpha_1,\\alpha_2 α1α2等,这些模型的权重的确定。

④循环以上过程n次(从第二次开始,每次计算的模型错误率,是带权错误率)。
(n的值是自己指定的,希望的迭代次数)。
直到得到模型 F n ( x ) = F n − 1 ( x ) + G n ( x ) F_n(x)=F_n-1(x)+G_n(x) Fn(x)=Fn1(x)+Gn(x),即为AdaBoost算法的输出模型,此时的模型 F n ( x ) F_n(x) Fn(x)是一个强训练模型。


2. AdaBoost算法 逻辑详解

按照以上思路,下边开始针对其中涉及的细节进行详解。

2.1 数据


首先要面对的,是数据。假设样本数据集D中共有m个样本,并表示如下:

           D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) D=\\(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\\ D=(x1,y1),(x2,y2),...,(xm,ym)

其中 x i x_i xi是特征向量, y i y_i yi是标签。标签的取值可以是1和-1。

AdaBoost算法每次训练模型的时候,使用的可以是从m个样本中抽样抽出的部分样本,但是预测的时候必须统一,测试集必须是固定的m个样本。


2.2 带权错误率

使用AdaBoost算法,每次训练完弱模型后,需要进一步计算出其带权错误率。
带权错误率的公式如下:
             ε j = ∑ i = 1 m ω i j I f j ( x ) ≠ y i \\varepsilon_j=\\sum_i=1^m \\omega_ijI\\f_j(x)≠y_i\\ εj=i=1mωijIfj(x)=yi

如何理解这个式子:其中 I ( ) I() I()是指示函数,即,当括号内条件满足时值为1,当不满足条件时值为0。
这里括号内的条件,即表示对某样本的分类不正确。可以看出,预测错误的样本越多,该值则越大。


ω i j \\omega_ij ωij即第j次迭代中的第i个样本的权重。
在第一次迭代中第一次训练弱模型时,每个样本的初始权重是均等的,均为 1 m \\frac1m m1

即每个样本被选中的概率是均等的。AdaBoost算法首先基于该均等的权重训练一个简单的弱学习器。
且因为均等权重,在第一次迭代的输出的弱分类器的带权错误率,是刚好等于预测错误的个数在m个样本中所占的比重的。(即带权错误率等于普通的分类错误率)。


2.3 损失函数 与 确定样本权重

AdaBoost算法的损失函数为指数损失。

以第k次迭代为例,第k次迭代将得到模型 F k ( x ) = F k − 1 ( x ) + α k G ( x ) F_k(x)=F_k-1(x)+\\alpha_kG(x) Fk(x)=Fk1(x)+αkG(x),则
F k ( x ) F_k(x) Fk(x)的损失函数函数为:

      L o s s = ∑ i = 1 m e − y i F k ( x i ) Loss=\\sum_i=1^me^-y_iF_k(x_i) Loss=i=1meyiFk(xi)

     经简单分析,可以看出,对于每个样本
     若预测正确,则指数为负,损失只增加 1 e \\frac1e e1
     若预测错误,则损失函数的损失会增加e。

 将该损失函数进行进一步展开得:

      L o s s = ∑ i = 1 m e − y i F k ( x i ) Loss=\\sum_i=1^me^-y_iF_k(x_i) Loss=i=1meyiFk(xi)

         = ∑ i = 1 m e − y i ( F k − 1 ( x i ) + α k G ( x i ) ) =\\sum_i=1^me^-y_i(F_k-1(x_i)+\\alpha_kG(x_i)) =i=1meyi(Fk1以上是关于AdaBoost算法详解及python实现Python机器学习系列(十八)的主要内容,如果未能解决你的问题,请参考以下文章

Adaboost算法详解(haar人脸检测)

一文详解机器学习中最好用的提升方法:Boosting 与 AdaBoost

Python机器学习算法之AdaBoost算法

Adaboost算法的原理推导及解释

Adaboost算法的原理推导及解释

Python机器学习(十七)AdaBoost原理与代码实现

(c)2006-2024 SYSTEM All Rights Reserved IT常识