概念
提升方法是一种思想:针对一个任务,将多个专家的建议适当的综合起来来做判断,这样比一个单独的专家的判断更有力,类似于“三个臭皮匠顶个诸葛亮”。
对于一个分类任务来讲,求解一个粗糙简单的弱分类器比求解精准分类的强分类器要简单的多,意思就是得到训练弱分类器比较简单,提升方法就是从弱分类器中不断的学习误差,每一个弱分类器都会学习之前一系列分类器的误差,这样可以得到一系列的弱分类器,组合这些弱分类器得到一个强分类器,这就是提升方法。
提升方法需要解决的问题
大多数提升方法是改变训练数据的概率分布,针对不同的训练数据的分布调用弱学习算法来学习一系列的弱分类器,所以对于提升方法来讲,它需要解决两个问题:
- 1、如何确定数据集的权重,或者说是概率分布?
- 2、这些弱分类器该如何来组合?
上述是《统计学习方法》中介绍的,细致来分的话,有几个具体的问题Boosting算法没有详细说明。
- 1、如何计算学习误差率e?
- 2、如何得到弱学习器权重系数α?
- 3、如何更新样本权重D?
- 4、使用何种结合策略?
只要是boosting大家族的算法,都要解决这4个问题。那么Adaboost是怎么解决的呢?具体往下看。
AdaBoost算法
AdaBoost针对上述第一个问题的思路就是提高那些被分类错误的数据样本的权重,让它们在下一轮的训练过程中备受关注,降低训练正确的数据样本的权重,于是被错误分类的数据样本就不断的被“分而治之”,AdaBoost中的“Ada”意思为Adaptive。
针对第二个问题的思路就是针对每个分类器采用加权多数表决的方式,加大分类错误率极小的弱分类器的权重,让它们在表决中起关键性作用,同样减小分类错误率大的弱分类器的权重,让它影响较小,具体算法流程如下所示。
输入:T=(x1,y1),(x2,y2),...,(xn,yn)T={(x_1,y_1),(x_2,y_2),...,(x_n,y_n)}T=(x1,y1),(x2,y2),...,(xn,yn),yi∈{
1,−1}y_i \in \{1,-1\}yi∈{
1,−1},弱学习算法
-
初始化数据分布权重,D1=(w11,w12,w13,...,w1i,...,w1n)D_1=(w_{11},w_{12},w_{13},...,w_{1i},...,w_{1n})D1=(w11,w12,w13,...,w1i,...,w1n),w1i=1n,i=1,2,3,...,nw_{1i}=\frac{1}{n},i=1,2,3,...,nw1i=n1,i=1,2,3,...,n
-
对m初始化,m=1,2,3...,mm=1,2,3...,mm=1,2,3...,m,下列步骤循环
(1)用具有权重DmD_mDm的数据训练集来学习算法,得到一个基本的分类器:
Gm(x):X→{ −1,1} G_m(x):X\to\{-1,1\} Gm(x):X→{ −1,1}
(2)计算GmG_mGm在训练数据集上的分类误差:
em=P(Gm(xi)!=yi)=∑i=1nwmiI(Gm(xi)!=yi) e_m=P(G_m(x_i) != y_i)=\sum_{i=1}^{n}w_{mi}I(G_m(x_i) {!=} y_i) em=P(Gm(xi)!=yi)=i=1∑nwmiI(Gm(xi)!=yi)
eme_mem其实是表示分类错误的样本权重求和,其中Gm(xi)G_m(x_i)Gm(xi)表示分类器的输出,书中应该直接认为Gm(xi)G_m(x_i)Gm(xi)就是一个分类结果,直接输出分类结果,比如-1、1,所以才有后面的yi!=Gm(xi)y_i!=G_m(x_i)yi!=G