AdaBoost算法的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Oscar6280868/article/details/83927950

今天看了周志华教授的Boosting算法研究报告,之前我也有学习过AdaBoost算法,现在就想结合周教授的讲座和自己对boosting算法的理解写一篇博文。说到Boosting算法,其实Boosting算法是一个算法族,所有的Boosting算法都是基于属于Boosting算法族,然而AdaBoosting算法是Boosting算法族中的一个典型的代表。
Boosting是一族可将弱学习器提升为强学习器的算法,这族算法的工作机制都很相似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器预测错误的训练样本在后续受到更多的关注,给予更高的权重,然后基于调整之后的样本来训练下一个学习器。 重复这个过程直到基学习器数目达到事先指定的值T,最终将T个学习器进行加权结合。做一个准确率50%-60%的分类器是很容易的,但是要做一个95%+的分类器是比较难的,我们可以将多个准确率为50%-60%的弱分类器进行线性组合,最终可以组合成一个95%+的强分类器,AdaBoost算法就是将多个弱的分类器组合起来成为一个强的分类器。
首先我们来看看AdaBoost算法的流程:
输入:
训练集: D  = { ( x 1 , y 1 ),( x 2 , y 2 ),( x 3 , y 3 ), . . . ,( x n , y n )}  D{\text{ = \{ (}}{{\text{x}}_1}{\text{,}}{{\text{y}}_1}{\text{),(}}{{\text{x}}_2}{\text{,}}{{\text{y}}_2}{\text{),(}}{{\text{x}}_3}{\text{,}}{{\text{y}}_3}{\text{),}}...{\text{,(}}{{\text{x}}_n}{\text{,}}{{\text{y}}_n}{\text{)\} }}
基学习算法: A {\rm A}
训练轮数:T

过程:
1: D 1 ( x ) = 1 n {D_1}(x) = \frac{1}{n}
2:for t = 1,2,3,…,T do
3: h t = A ( D , D t ) ; {h_t} = {\rm A}(D,{D_t});
4: ε t = P x D t ( h t ( x ) f ( x ) ) {\varepsilon _t} = {P_{x-{D_t}}}({h_t}(x) \ne f(x))
5:if ε t > 0.5 {\varepsilon _t} > 0.5 then break
6: α t = 1 2 ln ( 1 ε t ε t ) {\alpha _t} = \frac{1}{2}\ln (\frac{{1 - {\varepsilon _t}}}{{{\varepsilon _t}}})
7: D t + 1 ( x ) = D t ( x ) Z t exp ( α t ) , i f   h ( x ) = f ( x ) {D_{t + 1}}(x) = \frac{{{D_t}(x)}}{{{Z_t}}} \cdot \exp ( - {\alpha _t}),if~h(x) = f(x)
D t + 1 ( x ) = D t ( x ) Z t exp ( α t ) , i f   h ( x ) f ( x ) {D_{t + 1}}(x) = \frac{{{D_t}(x)}}{{{Z_t}}} \cdot \exp ({\alpha _t}),if~h(x) \ne f(x)
D t + 1 ( x ) = D t ( x ) exp ( α t f ( x ) h t ( x ) ) Z t \Leftrightarrow {D_{t + 1}}(x) = \frac{{{D_t}(x)\exp ( - {\alpha _t}f(x){h_t}(x))}}{{{Z_t}}}
8:end for

输出:
H ( x ) = s i g n ( t = 1 T α t h t ( x ) ) H(x) = sign(\sum\limits_{t = 1}^T {{\alpha _t}{h_t}(x)} )

如上所述就是AdaBoost算法的整个完整的流程,在上述的算法中 D n {D_n} 代表的是每一次调整权重之后的权值分布, ε t {\varepsilon _t} 表示第t轮的残差, α t {\alpha _t} 表示权重系数,h(x)表示预测函数,f(x)表示真实函数, h t {h_t} 表示弱分类器, Z t {Z_t} 表示规范化因子,以确保 D t + 1 {D_{t + 1}} 是一个分布。
有了如上的描述,我们可以看看AdaBoost算法的整个详细流程:最开始把每个弱分类器的权值都初始化一样,然后有一个基学习算法来计算我们的预测函数,然后我们可以计算每一个弱分类器的残差,然后根据每一轮的残差来计算下一轮的权值,最终我们可以调整新一轮的权值分布,直到循环迭代次数达到T,最终我们可以得到每一个若分类器的权值,将这些弱分类器进行线性相连,我们就可以得到一个强分类器 H ( x ) H(x)
其实Boosting算法要求基学习器能对特定的数据分布进行学习,这可通过“重赋权法”实施,就是在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重,对于无法接受带权样本的基学习算法,则可以通过“重采样法”来处理,也就是说再每一轮的学习中,根据样本分布对训练集重新进行采样,再用重采样得到的样本集对基学习器进行训练。以上就是AdaBoost算法的核心思想,主要就是通过残差来调整我们及基学习器的权值分布,将我们的弱分类器进行线性组合,最终可以得到一个强的分类器了。以上就是AdaBoost算法的基本思想,希望对大家的Boosting族算法有一个基本的理解。

猜你喜欢

转载自blog.csdn.net/Oscar6280868/article/details/83927950
今日推荐