Adaboost算法简介:
Adaboost集成算法通过基于上一次的预测结果,调整每一次样本的权重值(增加分类错误的样本权重,减少分类正确的样本权重),使得在下一次进行预测时,更加关注那些分类错误的样本。
最终的分类器为
f(x)=sign(i=1∑MαmGm(x))
其中
αm为每个弱分类器对应的权重
具体的算法过程
- 初始化训练数据的权重分布
D1=(w11,w12,w1i,...w1N),w1i=N1,i=1,2,...N
- 对m=1,2,…M
a.使用具有权值分布的
Dm训练数据集学习,得到弱分类器
Gm
b.计算
Gm在训练数据集上的分类误差率
em=i=1∑NwmiI(Gm(xi)̸=yi)
c.计算
Gm的系数
αm=21logem1−em
可以看出,如果
Gm的错误太多,则
αm较小
d.更新训练数据集的权值分布
Dm+1=(wm+1,1,wm+1,2,wm+1,i,...wm+1,N)
wm+1,i=Zmwmiexp(−αmyiGm(xi))
其中
Zm=i=1∑Nwmiexp(−αmyiGmxi)为规范化因子,使
Dm+1成为一个概率分布。
Adaboost算法推导
在上述的算法流程中,存在几个疑惑,比如为什么
αm=21logem1−em,为什么每个样本的权值更新公式是
wm+1,i=Zmwmiexp(−αmyiGm(xi))。
接下来在推导中解决上述问题。
Adaboost可以理解为是一个前向分步加法算法的特例,模型基本是由基本分类器组成的加法模型,损失函数是指数函数
指数函数的损失函数为
L=exp(−yG(x))
可以看出,如果预测值与真实值相同,则损失函数L为
exp(−1),如果预测值与真实值不同,则损失函数L为
exp(1),故减小损失函数,则需让模型拟合得正确率更高。
Adaboost的算法结果可以理解为是在前面m-1个弱分类器确定的情况下,通过改进
Gm来达到优化损失函数的目的。
故对于第m次迭代,目标是减小损失函数,即
α,Gmmini=1∑Nexp(−yi(fm−1(x)+αG(xi)))=α,Gmmini=1∑Nexp(−yifm−1(x))exp(−yiαG(xi))
其中由于
exp(−yifm−1(x))既不依赖
α也不依赖
Gm,故用
wˉmi表示
故对于第m次迭代,要减小的损失函数为
α,Gmmini=1∑Nwˉmiexp(−yiαG(xi))
接下来分成两步来求解,1求
G∗m,2求
α∗
1求
G∗m
由于存在
G∗m分类正确和分类错误两种情况,所以将损失函数拆成分类正确和分类错误这样的两项
α,Gmmini=1∑Nwˉmiexp(−yiαG(xi))=i=1∑Nwˉm,iexp(−α)I(G(xi)=yi)+i=1∑Nwˉm,iexp(α)I(G(xi)̸=yi)=i=1∑Nwˉmiexp(−α)+(exp(α)−exp(−α))i=1∑Nwˉm,iI(G(xi)̸=yi)
故
G∗m=Gmini=1∑Nwˉm,i(G(xi)̸=yi)
即在
wˉmi权重下,分类错误最低的
Gm
2求
α∗
确定好
G∗m后,带入原损失函数中
i=1∑Nwˉmiexp(−α)+(exp(α)−exp(−α))i=1∑Nwˉm,iI(G(xi)̸=yi)
对
α求导,并令导数为0
−exp(−α)i=1∑Nwˉmi+(exp(α)+exp(−α))i=1∑Nwˉm,iI(G(xi)̸=yi)=0
把含有
exp(−α)合并成一类,含有
exp(α)合并成另一类
exp(α)i=1∑Nwˉm,iI(G(xi)̸=yi)=exp(−α)(i=1∑Nwˉm,i−i=1∑Nwˉm,iI(G(xi)̸=yi))
等式左右两侧同时除以
i=1∑Nwˉm,i
emexp(α)=exp(−α)(1−em)
左右取对数
α+log(em)=−α+log(1−em)
最终得
α∗=21log(em1−em)
最后每一轮的样本权重更新由
wˉmi=exp(−yifm−1(x))得
wˉm+1,i=exp(−yi(fm(x)))=exp(−yi(fm−1(x)+αGm))=exp(−yifm−1(x))exp(−yiαGm)=wˉmiexp(−yiαGm)
这与Adaboost算法的样本权值更新只相差规范化因子,因此等价。因为乘上规范化因子后,只是改变了系数大小,对于中间推导的
α∗和
G∗m都是没有影响的。