集成学习-Bagging-Boosting-AdaBoost

集成学习

1.导言

一个形象的比喻:“三个臭皮匠赛过诸葛亮!”
假设输入x\boldsymbol{{x}}和输出y\boldsymbol{{y}}之间的真实关系为:y=h(x)\boldsymbol{{y}}=h(\boldsymbol{{x}}).对于M\boldsymbol{{M}}个不同的模型f1(x),,fM(x)f_1(\boldsymbol{{x}}),\cdots,f_{\boldsymbol{{M}}}(\boldsymbol{{x}}),每个模型的期望错误定义如下:
R(fm)=Ex[(fm(x)h(x))2]=Ex[ϵm(x)2](式1) \begin{aligned} \mathcal{R}(f_m)&=\operatorname{E}_{\boldsymbol{{x}}}\left[(f_m(\boldsymbol{{x}})-h(\boldsymbol{{x}}))^2\right]\\ &=\operatorname{E}_{\boldsymbol{{x}}}\left[\epsilon_m(\boldsymbol{{x}})^2\right]\tag{式1} \end{aligned}
其中,ϵm(x)=(fm(x)h(x))\epsilon_m(\boldsymbol{{x}})=(f_m(\boldsymbol{{x}})-h(\boldsymbol{{x}}))为模型m\boldsymbol{m}在样本x\boldsymbol{x}上的错误。
这样一来,所有模型的平均错误为:
Rˉ(f)=1Mm=1MEx[ϵm(x)2](式2) \bar{\mathcal{R}}(f)=\cfrac{1}{\boldsymbol{M}}\sum_{m=1}^{{\boldsymbol{M}}}\operatorname{E}_{\boldsymbol{{x}}}\left[\epsilon_m(\boldsymbol{{x}})^2\right]\tag{式2}

集成学习(Ensemble Learning)是采取某种策略(比如:直接平均,加权平均)将多个模型集成起来,通过群体决策来提高准确率。集成学习首要的问题是如何集成多个模型。
最直接的策略是:直接平均,即通过“投票”。基于投票的集成模型F(x)F(\boldsymbol{{x}})定义为:
F(x)=1Mm=1Mfm(x)(式3) F(\boldsymbol{{x}})=\cfrac{1}{\boldsymbol{M}}\sum_{m=1}^{{\boldsymbol{M}}}f_m({\boldsymbol{x}})\tag{式3}
在这里,通过简单投票机制的集成模型F(x)=1Mm=1Mfm(x)F(\boldsymbol{{x}})=\cfrac{1}{\boldsymbol{M}}\sum_{m=1}^{{\boldsymbol{M}}}f_m({\boldsymbol{x}}),F(x)F(\boldsymbol{{x}})的期望在:1MRˉ(f)\cfrac{1}{\boldsymbol{M}}\bar{\mathcal{R}}(f)Rˉ(f)\bar{\mathcal{R}}(f)之间。

【证明】:根据定义,集成模型的期望错误为:
R(F)=Ex[(1Mm=1Mfm(x)h(x))2]=Ex[(1Mm=1Mϵm(x))2]=Ex[1M2m=1Mn=1Mϵm(x)ϵn(x)]=1M2m=1Mn=1MEx[ϵm(x)ϵn(x)](式4) \begin{aligned} \mathcal{R}(F)&=\operatorname{E}_{\boldsymbol{{x}}}\left[(\cfrac{1}{\boldsymbol{M}}\sum_{m=1}^{{\boldsymbol{M}}}f_m({\boldsymbol{x}})-h(\boldsymbol{{x}}))^2\right]\\ &=\operatorname{E}_{\boldsymbol{{x}}}\left[(\cfrac{1}{\boldsymbol{M}}\sum_{m=1}^{{\boldsymbol{M}}}\epsilon_m(\boldsymbol{{x}}))^2\right]\\ &=\operatorname{E}_{\boldsymbol{{x}}}\left[\cfrac{1}{\boldsymbol{M}^2}\sum_{m=1}^{{\boldsymbol{M}}}\sum_{n=1}^{{\boldsymbol{M}}}\epsilon_m(\boldsymbol{{x}})\epsilon_n(\boldsymbol{{x}})\right]\\ &=\cfrac{1}{\boldsymbol{M}^2}\sum_{m=1}^{{\boldsymbol{M}}}\sum_{n=1}^{{\boldsymbol{M}}}\operatorname{E}_{\boldsymbol{x}}\left[\epsilon_m(\boldsymbol{{x}})\epsilon_n(\boldsymbol{{x}})\right]\tag{式4} \end{aligned}
其中,Ex[ϵm(x)ϵn(x)]\operatorname{E}_{\boldsymbol{x}}\left[\epsilon_m(\boldsymbol{{x}})\epsilon_n(\boldsymbol{{x}})\right]为两个不同模型错误的相关性。如果每一个模型的错误是不相关的,则有:
mn,Ex[ϵm(x)ϵn(x)]=0(式5) \forall{m\neq{n}},\operatorname{E}_{\boldsymbol{x}}\left[\epsilon_m(\boldsymbol{{x}})\epsilon_n(\boldsymbol{{x}})\right]=0\tag{式5}
如果,每个模型的错误都是相同的,则:
mn,ϵm(x)=ϵn(x)(式6) \forall{m\neq{n}},\epsilon_m(\boldsymbol{{x}})=\epsilon_n(\boldsymbol{{x}})\tag{式6}
且由于:m,ϵm(x)0\forall{m},\epsilon_m(\boldsymbol{{x}})\ge0,于是得到:
Rˉ(f)R(f)1MRˉ(f)(式7) \bar{\mathcal{R}}(f)\ge{{\mathcal{R}}(f)}\ge{\cfrac{1}{\boldsymbol{M}}\bar{\mathcal{R}}(f)}\tag{式7}
也就是说:集成模型的期望错误大于等于所有模型的平均期望错误的1/M1/M,小于等于所有模型的平均期望错误。

\Longrightarrow为了得到更好的模型集成效果,则需要每个模型之间具备一定的差异性。且随着模型数量的增多,其错误率也会下降,最终趋近于0.

一个有效的集成学习模型要求各个基模型(弱分类器)之间的差异尽可能大,为了增加基模型之间的差异,可以采用BaggingBoosting这两类方法。

2.Bagging类方法

Bagging类方法是通过随机构造训练样本,随机选取特征等方法来提高每个基模型之间的独立性,代表性方法有:Bagging和随机森林。
Bagging\rightarrow{Bagging}:(Bootstrap Aggregating)是通过不同模型的训练数据集的独立性来提高模型之间的独立性。在原始数据集上进行有放回的随机采样,得到MM个比较小的训练集,并训练MM个模型,然后通过投票的方法进行模型集成。
\rightarrow随机森林:(Random Forest)是在Bagging的基础上再引入了随机特征,进一步提高每个基模型之间的独立性。再随机森林中,每个基模型都是一棵决策树。

3.Boosting类方法

Boosting类方法,是按照一定顺序来先后训练不同的基模型,每个模型都针对前序模型的错误进行训练。根据前序模型的结果,来调整训练样本的权重,增加不同基模型之间的差异性。Boosting类方法的代表有:Adaboost方法。
AdaBoost\rightarrow AdaBoost:Boosting类的集成模型的目标是学习到一个加性模型,即:
F(x)=m=1Mαmfm(x)(式8) F(\boldsymbol{x})=\sum_{m=1}^{\boldsymbol{M}}\alpha_{m}f_m(\boldsymbol{x})\tag{式8}
其中,fm(x)f_m(\boldsymbol{x})为弱分类器,或者基分类器。αm\alpha_{m}为弱分类器的集成权重,F(x)F(\boldsymbol{x})就为强分类器。

Boosting类方法的关键:
怎样训练确定每一个弱分类器fm(x)f_m(\boldsymbol{x})及其权重αm\alpha_{\boldsymbol{m}}。做法为:采用迭代的方式来学习每一个弱分类器,也就是按照一定的顺序依次训练每一个弱分类器。具体为:”假设已经训练了mm个弱分类器,再训练第m+1m+1个弱分类器的时候,增加已有弱分类器错分样本的权重,使得第m+1m+1个弱分类器更加关注已有弱分类器错分的样本“。这样增加每个弱分类器的差异,最终提升集成分类器的准确率。这种方法叫做:AdaBoost算法。

二分类AdaBoost算法过如下:
在这里插入图片描述
AdaBoost算法的统计学解释:
AdaBoost算法可以视为一种分步优化的加性模型。损失函数定义如下:
L(F)=exp(yF(x))=exp(ym=1Mαmfm(x))(式9)\begin{aligned} \mathfrak{L}(F) &= exp(- yF(\boldsymbol{x}))\\ &=exp(-y\sum_{m=1}^{\boldsymbol{M}}\alpha_mf_m(\boldsymbol{x}))\tag{式9} \end{aligned}
其中,y,fm(x){1,+1}y,f_m{(\boldsymbol{x}})\in\{-1,+1\}.
若前m1m-1次迭代之后得到:
Fm1(x)=t=1m1αtft(x)(式10)F_{m-1}(\boldsymbol{x})=\sum_{t=1}^{m-1}\alpha_tf_t(\boldsymbol{x})\tag{式10}
则第mm次迭代的目标是找到一个αm\alpha_mfm(x)f_m(\boldsymbol{x})使得损失函数最小,即:
L(αm,fm(x))=n=1Nexp(y(n)(Fm1(x(n))+αmfm(x(n))))(式11)\mathfrak{L}(\alpha_m,f_m(\boldsymbol{x}))=\sum_{n=1}^{N}exp(-y^{(n)}(F_{m-1}(\boldsymbol{x}^{(n)})+\alpha_mf_m(\boldsymbol{x}^{(n)})))\tag{式11}
wm(n)=exp(y(n)Fm1(x(n)))w_m^{(n)}=exp(-y^{(n)}F_{m-1}(\boldsymbol{x}^{(n)})),那么上式可以写为:L(αm,fm(x))=n=1Nwm(n)exp(αmy(n)fm(x)(n)))(式12)\mathfrak{L}(\alpha_m,f_m(\boldsymbol{x}))=\sum_{n=1}^{N}w_m^{(n)}exp(-\alpha_my^{(n)}f_m(\boldsymbol{x})^{(n)}))\tag{式12}
因为:y,fm(x){1,+1}y,f_m(\boldsymbol{x})\in\{-1,+1\},则有:
yfm(x)=12I(yfm(x))(式13)yf_m(\boldsymbol{x}) = 1-2I(y\neq{f_m(\boldsymbol{x})})\tag{式13}
其中,I(x)I(\boldsymbol{x})为指示函数。
将损失函数进行二阶泰勒展开,得到:
L(αm,fm(x))=n=1Nwm(n)(1αmy(n)fm(x(n))+12αm2)αmn=1Nwm(n)I(yfm(x))(式14)\begin{aligned} \mathfrak{L}(\alpha_m,f_m(\boldsymbol{x}))&=\sum_{n=1}^{N}w_m^{(n)}\left(1-\alpha_my^{(n)}f_m(\boldsymbol{x}^{(n)})+\cfrac{1}{2}\alpha_m^2\right)\\ &\propto{\alpha_m\sum_{n=1}^{N}w_m^{(n)}I(y\neq{f_m(\boldsymbol{x})})} \end{aligned}\tag{式14}
可以得到,当αm>0\alpha_m>0时,最优分类器fm(x)f_m(\boldsymbol{x})为:样本权重是wm(n),1nNw_m^{(n)},1\le{n}\le{N}时的加权错误最小的分类器。
这样一来,求出了fm(x)f_m(\boldsymbol{x}),则式12可以写成:
L(αm,fm(x))=y(n)fm((x)(n))wm(n)exp(αm)+y(n)=fm((x)(n))wm(n)exp(αm)ϵmexp(αm)+(1ϵm)exp(αm)(式15) \begin{aligned} \mathfrak{L}(\alpha_m,f_m(\boldsymbol{x}))&=\sum_{y^{(n)}\neq{f_m((\boldsymbol{x})^{(n)})}}w_m^{(n)}exp(\alpha_m)+\sum_{y^{(n)}={f_m((\boldsymbol{x})^{(n)})}}w_m^{(n)}exp(-\alpha_m)\\ &\propto{\epsilon_mexp(\alpha_m)}+(1-\epsilon_m)exp(-\alpha_m) \end{aligned}\tag{式15}
其中,ϵm\epsilon_m为分类器fm(x)f_m(\boldsymbol{x})的加权错误率。
ϵm=y(n)fm((x)(n))wm(n)nwm(n)(式16) \epsilon_m=\cfrac{\sum_{y^{(n)}\neq{f_m((\boldsymbol{x})^{(n)})}}w_m^{(n)}}{\sum_nw_m^{(n)}}\tag{式16}
于是求取式15关于αm\alpha_m的导数并令为零:
α=12log1ϵmϵm(式17) \alpha=\cfrac{1}{2}\log{\cfrac{1-\epsilon_m}{\epsilon_m}}\tag{式17}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章