前向分布算法
前向分布算法属于加法模型:
f(x)=∑m=1Mβmb(x;γm)f(x) = \sum_{m=1}^M\beta_mb(x; \gamma_m)f(x)=m=1∑Mβmb(x;γm)
b(x;γm)b(x; \gamma_m)b(x;γm)为基函数,即基分类器,βm为基函数的系数\beta_m为基函数的系数βm为基函数的系数。
Adaboost算法的基本思路
Adaboost使用的是Boosting算法集成框架,首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
输入:训练数据集,弱学习算法,弱分类器迭代次数K
输出:最终分类器
- 初始化训练数据的权值分布
- 使用具有权重DkD_kDk的样本集来训练数据,得到弱分类器Gk(x)G_k(x)Gk(x)
- 计算分类误差率,找到分类误差率最低的时候的阈值vvv
- 计算Gk(x)的分类误差率
- 计算弱分类器的系数
- 更新样本集的权重分布
- 根据阈值vvv在分类
- 迭代…直到分类器上的误分类点为0
- 强分类器
AdaBoost二元分类问题算法流程
输入:训练样本集T=T =T= {(x1,y1),(x2,y2),⋯ ,(xm,ym)(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)(x1,y1),(x2,y2),⋯,(xm,ym)}、弱分类器算法, 弱分类器迭代次数K。
输出:最终的强分类器
-
初始化训练数据的权值分布D(1)=(w11,w12,⋯ ,w1m);w1i=1m;i=1,2⋯mD(1) = (w_{11},w_{12},\cdots,w_{1m});w_{1i} = \frac {1}{m};i = 1,2\cdots mD(1)=(w11,w12,⋯,w1m);w1i=m1;i=1,2⋯m
-
使用具有权重DkD_kDk的样本集来训练数据,得到弱分类器Gk(x)G_k(x)Gk(x)
-
计算分类误差率eke_kek,找到分类误差率最低的时候的阈值vvv
-
计算Gk(x)的分类误差率计算Gk(x)的分类误差率ek=P(Gk(xi)=/ yi)=∑i=1mwkiI(Gk(xi)=/ yi)e_k = P(G_k(x_i){=}\mathllap{/\,}y_i) = \sum_{i=1}^mw_{ki}I(G_k(x_i){=}\mathllap{/\,}y_i)ek=P(Gk(xi)=/yi)=i=1∑mwkiI(Gk(xi)=/yi)
-
计算弱分类器的系数计算弱分类器的系数αk=12log1−ekek\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k}αk=21logek1−ek
-
更新样本集的权重分布wk+1,i=wkiZKexp(−αkyiGk(xi)),i=1,2,3⋯mw_{k+1,i} = \frac{w_{ki}}{Z_K}exp(-\alpha_ky_iG_k(x_i)) ,i = 1,2,3 \cdots mwk+1,i=ZKwkiexp(−αkyiGk(xi)),i=1,2,3⋯m
Zk=∑i=1mwkiexp(−αkyiGk(xi)),ZK为规范化因子Z_k = \sum_{i =1}^mw_{ki}exp(-\alpha_ky_iG_k(x_i)),Z_K为规范化因子Zk=i=1∑mwkiexp(−αkyiGk(xi)),ZK为规范化因子 -
根据阈值vvv在分类根据阈值vvv在分类
-
迭代…直到分类器上的误分类点为0
-
强分类器f(x)=sign(∑k=1KαkGk(x))f(x) = sign(\sum_{k=1}^K\alpha_kG_k(x))f(x)=sign(k=1∑KαkGk(x))
对于Adaboost多元分类算法,其实原理和二元分类类似,最主要区别在弱分类器的系数上。比如Adaboost SAMME算法,它的弱分类器的系数
αk=12log1−ekek+log(R−1),其中R为类别数。\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k}+log(R-1),其中R为类别数。αk=21logek1−ek+log(R−1),其中R为类别数。
Adaboost回归问题的算法流程
这里我们对AdaBoost回归问题算法流程做一个总结。AdaBoost回归算法变种很多,下面的算法为Adaboost R2回归算法过程。
- 初始化训练数据的权值分布D(1)=(w11,w12,⋯ ,w1m);w1i=1m;i=1,2⋯mD(1) = (w_{11},w_{12},\cdots,w_{1m});w_{1i} = \frac {1}{m};i = 1,2\cdots mD(1)=(w11,w12,⋯,w1m);w1i=m1;i=1,2⋯m
- 使用具有权重DkD_kDk的样本集来训练数据,得到弱分类器Gk(x)G_k(x)Gk(x)使用具有权重DkD_kDk的样本集来训练数据,得到弱分类器Gk(x)G_k(x)Gk(x)
- 计算训练集上的最大误差Ek=max∣yi−Gk(xi)∣,i=1,2⋯mE_k = max|y_i-G_k(x_i)|,i = 1,2\cdots mEk=max∣yi−Gk(xi)∣,i=1,2⋯m
- 计算每个样本的相对误差:
a.如果是线性误差,则eki=∣yi−Gk(xi)∣Eke_{ki} = \frac{|y_i-G_k(x_i)|}{E_k}eki=Ek∣yi−Gk(xi)∣
b.如果是平方误差,则eki=(yi−Gk(xi))2Eke_{ki} = \frac{(y_i-G_k(x_i))^2}{E_k}eki=Ek(yi−Gk(xi))2
c.如果是指数误差,则eki=1−exp(−∣yi−Gk(xi)∣Ek)e_{ki} = 1- exp(- \frac{|y_i-G_k(x_i)|}{E_k})eki=1−exp(−Ek∣yi−Gk(xi)∣) - 计算回归误差率sk=∑i=1mwkiekis_k = \sum_{i=1}^m w_{ki}e_{ki}sk=i=1∑mwkieki
- 计算弱学习器的系数αk=ek1−ek\alpha_k =\frac{e_k}{1-e_k}αk=1−ekek
- 更新样本集的权重分布为wk+1,i=wkiZkαk1−ekiw_{k+1,i}=\frac{w_{ki}}{Z_k}\alpha_k^{1-e_{ki}}wk+1,i=Zkwkiαk1−ekiZk=∑i=1mwkiαk1−ekiZ_k = \sum_{i=1}^mw_{ki}\alpha_k^{1-e_{ki}}Zk=i=1∑mwkiαk1−eki
- 构建最终强学习器为:f(x)=Gk∗(x)f(x) = G_{k^*}(x)f(x)=Gk∗(x)
其中,Gk∗(x)G_{k^*}(x)Gk∗(x)是所有ln1αk,k=1,2,....Kln\frac{1}{\alpha_k},k=1,2,....Klnαk1,k=1,2,....K的中位数值对应序号k∗k^*k∗对应的弱学习器。
Adaboost算法的正则化
为了防止Adaboost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。定义为vvv,对于前面的弱学习器的迭代
fk(x)=fk−1(x)+αkGk(x)f_k(x) = f_{k-1}(x)+\alpha_kG_k(x)fk(x)=fk−1(x)+αkGk(x)
加上了正则化项,则有
fk(x)=fk−1(x)+vαkGk(x),0<ν≤1f_k(x) = f_{k-1}(x)+v\alpha_kG_k(x),0<ν≤1fk(x)=fk−1(x)+vαkGk(x),0<ν≤1
对于同样的训练集学习效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
Adaboost算法的优缺点
- 优点:
Adaboost作为分类器时,分类精度很高
在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
作为简单的二元分类器时,构造简单,结果可理解。
不容易发生过拟合 - 缺点
对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。