在前面的博客(https://blog.csdn.net/qq_16608563/article/details/82878127)
介绍了集成学习的bagging方法及其代表性的随机森林。此次接着介绍集成学习的另一个方法boosting以及boosting系列的一些算法,具体包括 Adaboost、GBDT和xgboost
boosting(提升)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中
,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。与bagging不同的是,各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
提升方法AdaBoost算法:
提升算法的基本思想:对于一个复杂的任务来说,将多个分类器的判断进行适当的综合得出的判断,要比任何一个分类器单独判断的结果要好。
强可学习与弱可学习:在概率近似正确的学习框架中(PAC),一个概念,如果存在一个多项式的学习算法可以学习它,并且正确率很高,那么称这个概念是强可学习的。
如果存在一个多项式的学习算法可以学习它,但学习的正确率仅仅比随机猜测略好,那么这个概念是弱可学习的。
结论:在PAC学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
那么问题来了,如果已经发现了“弱学习算法”,那么是否可以将它提升为“强可学习算法”
(弱学习算法是比较容易发现的)
提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器。
大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列的弱分类器。
这样,对于提升方法来说,有两个问题需要回答:
1)在每一轮如何改变数据的权值(训练样本的权重)或概率分布
2)如何将弱分类器组合成一个强分类器。
AdaBoost(Adaptive Boost):自适应提升
AdaBoost巧妙而自然的回答了以上的2个问题并把他们完美的融合在了一个算法中。
针对第一个问题,AdaBoost的做法是:**提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。**这样一来,那些没有被正确分类的样本,由于其权值的加大而受到后一轮弱分类器的更大关注。
针对第二个问题:即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体的加大分类误差率小的弱分类器的权重,使其在表决中起较大作用,减小分类误差率大的弱分类器的权重,使其在表决中起较小的作用(体现在弱分类器的权重 α α α与分类误差率 e m e_m em的关系式 α m = 1 2 l o g 1 − e m e m α_m=\frac{1}{2}log\frac{1-e_m}{e_m} αm=21logem1−em)后面详解。
AdaBoost算法:
输入:训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … ( x N , y N ) 其 中 y i = ( + 1 , − 1 ) T={(x_1,y_1),(x_2,y_2),…(x_N,y_N)}其中y_i={(+1,-1)} T=(x1,y1),(x2,y2),…(xN,yN)其中yi=(+1,−1)
弱学习算法
输出:最终分类器G(x)
针对这个算法我想这样来学习:先纵向看,再横向看,怎么讲?往下看
首先纵向看:看什么?看顺序,即算法流程,先算什么后算什么,参数是如何联系与推导的?
1)初始化训练数据的权值分布(提升方法的2个问题中的第一个问题)
D 1 = ( w 1 , 1 , w 1 , i … , w 1 , N ) D_1=(w_{1,1},w_{1,i}…,w_{1,N}) D1=(w1,1,w1,i…,w1,N) 其中 w 1 , i = 1 N w_{1,i}=\frac{1}{N} w1,i=N1
纵向看:算法的第一步是初始化了一个训练数据的权重向量 D 1 D_1 D1**
横向看:向量的每一个元素对应着一个训练样本的权重 w 1 , i w_{1,i} w1,i:其中1 代表是训练的轮数,i代表这一轮的第i个样本的权重。
还有这个权重向量在每一轮都会进行更新(所以才叫自适应啊,讲究),如何更新见下面的步奏。
2)对 m=1,2…M (这个是训练的轮数,也是弱分类器的个数)
(a)有了权重向量了 D m D_m Dm以后,在原始的训练数据上结合权重向量 D m D_m Dm以及弱学习算法,就可以得到基本分类器了 G m ( x ) G_m(x) Gm(x)
(b) 有了基本分类器 G m ( x ) G_m(x) Gm(x)之后,我们可以计算这个弱分类器 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率
e m = P ( G m ( x i ) ≠ y i ) = e_m=P(G_m(x_i)≠y_i)= em=P(Gm(xi)̸=yi)= ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) \displaystyle\sum_{i=1}^{N}w_{mi}I(G_m(x_i)≠y_i) i=1∑NwmiI(Gm(xi)̸=yi)
其实,弱分类器 G m ( x ) G_m(x) Gm(x)在加权的训练数据集上的分类误差率是被 G m ( x ) G_m(x) Gm(x)误分类样本的权值之和。**
e m = P ( G m ( x i ) ≠ y i ) = e_m=P(G_m(x_i)≠y_i)= em=P(Gm(xi)̸=yi)= ∑ G m ( x i ) ≠ y i w m i \displaystyle\sum_{G_m(x_i)≠y_i}w_{mi} Gm(xi)̸=yi∑wmi
(c)误分类率 e m e_m em出来了,就可以使用它来计算弱分类器的权重了(前面说了分类效果不好的权重要低点)
α m = 1 2 l o g 1 − e m e m α_m=\frac{1}{2}log\frac{1-e_m}{e_m} αm=21logem1−em
(d) 弱分类器的系数 α m α_m αm出来了,接下来可以更新训练数据集的权值分布向量了 D m D_m Dm
(这个顺序很重要,有了向量权重D可以得出弱分类器 G m ( x ) G_m(x) Gm(x),有 了弱分类器可以计算对应的误分类率 e m e_m em,根据误分类率可以计算弱分类器的权重 α m α_m αm,进而再更新权值向量,这是一个循环)
D m + 1 = ( w m + 1 , 1 , … w m + 1 , i , … w m + 1 , N ) D_{m+1}=(w_{m+1,1},…w_{m+1,i},…w_{m+1,N}) Dm+1=(wm+1,1,…wm+1,i,…wm+1,N)
其中 w m + 1 , i = w m + 1 , i Z m e x p ( − α m y i G m ( x i ) ) w_{m+1,i}=\frac{w_{m+1,i}}{Z_m}exp(-α_my_iG_m(x_i)) wm+1,i=Zmwm+1,iexp(−αmyiGm(xi)) 其中 i=1,2……N
Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\displaystyle\sum_{i=1}^{N}w_{mi}exp(-α_my_iG_m(x_i)) Zm=i=1∑Nwmiexp(−αmyiGm(xi))为规范化因子
易知: Z m Z_m Zm的大小受到每一个样本的影响
y i G m ( x i ) y_iG_m(x_i) yiGm(xi)的取值只能是{+1,-1},预测正确是是+1,预测失败时是-1
3)构建基本分类器的线性组合
f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\displaystyle\sum_{m=1}^{M}α_mG_m(x) f(x)=m=1∑MαmGm(x)
得到最终的分类器
G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x)=sign(f(x))=sign(\displaystyle\sum_{m=1}^{M}α_mG_m(x)) G(x)=sign(f(x))=sign(m=1∑MαmGm(x))
对AdaBoost算法做如下说明:
步骤1:假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同,这一假设保证第一步能够在原始数据集上学习基本分类器 G 1 ( x ) G_1(x) G1(x)
步骤2:AdaBoost反复学习基本分类器,在每一轮m=1,2,3…M,顺次执行下列操作
(a)使用当前分布 D m D_m Dm加权的训练数据集,学习基本分类器 G m ( x i ) G_m(x_i) Gm(xi)
(b)计算基本分类器 G m ( x i ) G_m(x_i) Gm(xi)在加权训练数据集上的分类误差率:
e m = P ( G m ( x i ) ≠ y i ) = e_m=P(G_m(x_i)≠y_i)= em=P(Gm(xi)̸=yi)= ∑ G m ( x i ) ≠ y i w m i \displaystyle\sum_{G_m(x_i)≠y_i}w_{mi} Gm(xi)̸=yi∑wmi
这里, w m i w_{mi} wmi表示第m轮中第i个实例的权重 ∑ i = 1 N w m i = 1 \displaystyle\sum_{i=1}^{N}w_{mi}=1 i=1∑Nwmi=1
这表明, G m ( x ) G_m(x) Gm(x)在加权的训练数据集上的分类误差率是被 G m ( x ) G_m(x) Gm(x)误分类样本的权值之和。由此可以看出数据权值分布 D m D_m Dm与基本分类器 G m ( x ) G_m(x) Gm(x)的分类误差率的关系。
(c)计算基本分类器 G m ( x ) G_m(x) Gm(x)的系数 α m α_m αm, α m α_m αm表示基本分类器 G m ( x ) G_m(x) Gm(x)在最终分类器中的重要性。由 α m = 1 2 l o g 1 − e m e m α_m=\frac{1}{2}log\frac{1-e_m}{e_m} αm=21logem1−em可知,当 e m e_m em 小于0.5时, α m α_m αm大于0,并且 α m α_m αm随着 e m e_m em的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
(d)更新数据集的权重,为下一轮做准备
w m + 1 , i = w m , i Z m e − α m w_{m+1,i}=\frac{w_{m,i}}{Z_m}e^{-α_m} wm+1,i=Zmwm,ie−αm 当 G m ( x ) = y i G_m(x)=y_i Gm(x)=yi
w m + 1 , i = w m , i Z m e α m w_{m+1,i}=\frac{w_{m,i}}{Z_m}e^{α_m} wm+1,i=Zmwm,ieαm 当 G m ( x ) ≠ y i G_m(x)≠y_i Gm(x)̸=yi
这样,被基本分类器 G m ( x ) G_m(x) Gm(x)误分类的样本的权值得到扩大,而被正确分类的样本的权值得以缩小,因此误分类的样本在下一轮的学习中起更大的作用。