版权声明:本文为博主原创文章,未经博主允许不得转载。 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 = { (x1,y1),(x2,y2),(x3,y3),...,(xn,yn)} ;
基学习算法:
A
训练轮数:T
过程:
1:
D1(x)=n1
2:for t = 1,2,3,…,T do
3:
ht=A(D,Dt);
4:
εt=Px−Dt(ht(x)̸=f(x))
5:if
εt>0.5 then break
6:
αt=21ln(εt1−εt);
7:
Dt+1(x)=ZtDt(x)⋅exp(−αt),if h(x)=f(x)
Dt+1(x)=ZtDt(x)⋅exp(αt),if h(x)̸=f(x)
⇔Dt+1(x)=ZtDt(x)exp(−αtf(x)ht(x))
8:end for
输出:
H(x)=sign(t=1∑Tαtht(x))
如上所述就是AdaBoost算法的整个完整的流程,在上述的算法中
Dn代表的是每一次调整权重之后的权值分布,
εt表示第t轮的残差,
αt表示权重系数,h(x)表示预测函数,f(x)表示真实函数,
ht表示弱分类器,
Zt表示规范化因子,以确保
Dt+1是一个分布。
有了如上的描述,我们可以看看AdaBoost算法的整个详细流程:最开始把每个弱分类器的权值都初始化一样,然后有一个基学习算法来计算我们的预测函数,然后我们可以计算每一个弱分类器的残差,然后根据每一轮的残差来计算下一轮的权值,最终我们可以调整新一轮的权值分布,直到循环迭代次数达到T,最终我们可以得到每一个若分类器的权值,将这些弱分类器进行线性相连,我们就可以得到一个强分类器
H(x)。
其实Boosting算法要求基学习器能对特定的数据分布进行学习,这可通过“重赋权法”实施,就是在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重,对于无法接受带权样本的基学习算法,则可以通过“重采样法”来处理,也就是说再每一轮的学习中,根据样本分布对训练集重新进行采样,再用重采样得到的样本集对基学习器进行训练。以上就是AdaBoost算法的核心思想,主要就是通过残差来调整我们及基学习器的权值分布,将我们的弱分类器进行线性组合,最终可以得到一个强的分类器了。以上就是AdaBoost算法的基本思想,希望对大家的Boosting族算法有一个基本的理解。