AdaBoost是典型的Boosting算法,即找到相对容易的弱学习算法,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。Boosting算法要涉及到两个部分,加法模型和前向分步算法。
由于采用的损失函数不同,Boosting算法也因此有了不同的类型,AdaBoost就是损失函数为指数损失的Boosting算法
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),(x_N,y_N)\} T={ (x1,y1),(x2,y2),(xN,yN)},其中, x i ∈ X ⊆ R n x_i∈X⊆R^n xi∈X⊆Rn, y i ∈ Y = − 1 , 1 y_i∈Y={-1,1} yi∈Y=−1,1,迭代次数M
a. 初始化训练样本的权值分布: D 1 = ( w 1 , 1 , w 1 , 2 , … , w 1 , i ) , w 1 , i = 1 N , i = 1 , 2 , … , N D_1=(w_{1,1},w_{1,2},…,w_{1,i}),w_{1,i}=\frac{1}{N},i=1,2,…,N D1=(w1,1,w1,2,…,w1,i),w1,i=N1,i=1,2,…,N
b. 对于 m = 1 , 2 , … , M m=1,2,…,M m=1,2,…,M
c. 最终分类器
F ( x ) = s i g n ( ∑ i = 1 N α m G m ( x ) ) F(x)=sign(\sum_{i=1}^Nα_m G_m (x)) F(x)=sign(i=1∑NαmGm(x))
adaboost的损失函数为指数函数:
L ( y , f ( x ) ) = e x p [ − y f ( x ) ] L(y,f(x))=exp[-yf(x)] L(y,f(x))=exp[−yf(x)]
对于分类模型而言,上述损失函数,在分类正确的时候,指数部分为负数;在分类错误的时候,指数部分为正数,符合损失函数的意义。
前向分步为: f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_m(x)=f_{m-1}(x)+\alpha_mG_m(x) fm(x)=fm−1(x)+αmGm(x)
将前向分步代入损失函数,可得:
L o s s = ∑ i = 1 N e x p ( − y i f m ( x i ) ) = ∑ i = 1 N e x p ( − y i ( f m − 1 ( x i ) + α m G m ( x i ) ) ) Loss=\sum_{i=1}^Nexp(-y_i f_m (x_i ))=\sum_{i=1}^Nexp(-y_i (f_{m-1} (x_i )+α_m G_m (x_i ))) Loss=i=1∑Nexp(−yifm(xi))=i=1∑Nexp(−yi(fm−1(xi)+αmGm(xi)))此时 f m − 1 ( x ) f_{m-1}(x) fm−1(x)已知,即:
L o s s = ∑ i = 1 N w m , i ~ e x p ( − y i α m G m ( x i ) ) Loss=\sum_{i=1}^N\widetilde{w_{m,i}} exp(-y_i α_m G_m (x_i )) Loss=i=1∑Nwm,i exp(−yiαmGm(xi)) w m , i ~ = e x p ( − y i ( F m − 1 ( x ) ) ) \widetilde{w_{m,i}}=exp(-y_i (F_{m-1} (x))) wm,i =exp(−yi(Fm−1(x)))
于是分类器 G m ( x ) G_m(x) Gm(x)和这个分类器的权重 α m \alpha_m αm 可以表示成:
先求 G m ( x ) G_m(x) Gm(x),分类器的权重可以认为是一个确定的数, G m ( x ) G_m(x) Gm(x)是使得分错的(带权重的)样本里损失函数最小的那个,可以写成:
得到 G m ∗ ( x ) G^*_m(x) Gm∗(x)以后,求 α m ∗ \alpha^*_m αm∗
把上式对 α 求导,再令导函数为 0 ,得
更新权重
https://blog.csdn.net/FontThrone/article/details/78834807
https://louisscorpio.github.io/2017/11/28/%E4%BB%A3%E7%A0%81%E5%AE%9E%E6%88%98%E4%B9%8BAdaBoost/