背景知识:
在介绍Adaboost之前先明确一些基本概念。集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,它是一种思想,而不是一种具体算法,有多种不同的实现方案。个体学习器(individual learner)通常由一个现有的学习算法从训练数据中产生,例如决策树、BP神经网络等。如果集成学习中所有的个体学习器都是同种类型的,例如全是决策树,这样的集成是“同质”的,同质集成中的个体学习器亦称基学习器(base learner)。集成学也可包含不同类型的个体学习器,这样的集成是“异质”的,异质集成中的个体学习器常称为组件学习器(component learner)或直接称个体学习器。集成学习对弱学习器(weak learner)尤为明显,因此集成学习的许多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器。但需要注意的是,在实践中出于种种考虑,也会使用比较强的学习器。
Boosting是一组可将弱学习器提升为强学习器的算法,这族算法的工作机制类似:先从初始训练集训练出一个基学习器,在根基基学习器的表现对训练样本分本进行调整,是的先前基学习器做错的训练样本在后续收到更多关注,然后基于调整后的样本分布来训练下一个基学习器,如此重复进行。Boosting族算法中最著名的代表是Adaboost。
Adaboost算法推导
1.AdaBoost算法基本模型
F(x)=α1h1(x;γ1)+α2h2(x;γ2)+…+αtht(x;γt)=∑t=1Tαtht(x;γt)F(\pmb{x})=\alpha_1h_1(\pmb{x};\gamma_1)+\alpha_2h_2(\pmb{x};\gamma_2)+\ldots+\alpha_th_t(\pmb{x};\gamma_t)=\sum_{t=1}^T\alpha_th_t(\pmb{x};\gamma_t)F(xxx)=α1h1(xxx;γ1)+α2h2(xxx;γ2)+…+αtht(xxx;γt)=t=1∑Tαtht(xxx;γt)
每个弱分类器ht(x)h_t(\pmb{x})ht(xxx)的分类结果映射为1和-1,αt\alpha_tαt为每个弱分类器的权重,若F(x)>0F(\pmb{x})>0F(xxx)>0,代表各个弱分类器经过加权后,在最终投票过程中,多数投1,少数投-1,最终判定样本为正样本。所以最终得到的分类器可以用符号函数表示:
sgn(F(x))={1F(x)>0−1F(x)≤0sgn(F(\pmb{x}))=\begin{cases}
1 & F(\pmb{x})>0\\
-1 &F(\pmb{x})\leq 0
\end{cases}sgn(F(xxx))={1−1F(xxx)>0F(xxx)≤0
现在需要确定的参数为:弱分类器个数TTT、每一个弱分类器ht(x)h_t(\pmb{x})ht(xxx)的参数γt\gamma_tγt、每一个弱分类器的权重αt\alpha_tαt。
2.算法流程
第一步:
给定lll个样本(xi,yi)(\pmb{x_i}, y_i)(xixixi,yi),其中xi\pmb{x_i}xixixi是特征向量,yiy_iyi是类别标签,其值为+1和-1。
第二步:
为数据集中的每一个样本初始化一个权重值,初始化方法为:wi0=1/l, i=1,…,lw_i^0=1/l,\ \ \ i=1,\ldots,lwi0=1/l, i=1,…,l。注释:www的上标表示第1个弱分类器,下标表示第iii个样本;此时所有的样本权重相等。
第三步:
循环,对t=1,…,Tt=1,\ldots,Tt=1,…,T依次训练每个弱分类器
\qquad训练一个弱分类器,使该弱分类器的误差函数最小,也就是分错的样本对应的权值之和最小:
et=∑i=1lwit−1∣ht(xi)−yi∣2∑i=1lwit−1e_t=\frac{\sum_{i=1}^lw_i^{t-1}|h_t(\pmb{x_i})-y_i|}{2\sum_{i=1}^lw_i^{t-1}}et=2∑i=1lwit−1∑i=1lwit−1∣ht(xixixi)−yi∣
注释:ete_tet表示误差函数;当弱分类器预测正确时ht(xi)与yih_t(\pmb{x_i})与y_iht(xixixi)与yi同号,差值为0;当弱分类器预测错误时,ht(xi)与yih_t(\pmb{x_i})与y_iht(xixixi)与yi异号,差值的绝对值为2;wit−1w_i^{t-1}wit−1为上一次迭代时每一个样本的权重值;
\qquad计算弱分类器的权重:
αt=12log(1−etet)\alpha_t=\frac{1}{2}\log (\frac{1-e_t}{e_t})αt=21log(et1−et)
\qquad更新所有样本的权重:
wit=wit−1exp(−yiαtht(xi))Ztw_i^t=\frac{w_i^{t-1}exp(-y_i\alpha_th_t(\pmb{x_i}))}{Z_t}wit=Ztwit−1exp(−yiαtht(xixixi))
\qquad其中ZtZ_tZt为归一化因子,他是所有样本的权重之和:
Zt=∑i=1lwit−1exp(−yiαtht(xi))Z_t=\sum_{i=1}^lw_i^{t-1}exp(-y_i\alpha_th_t(\pmb{x_i}))Zt=i=1∑lwit−1exp(−yiαtht(xixixi))
结束循环:
第四步:得到强分类器
sign(F(x))=sgn(∑t=1Tαtht(x))sign(F(\pmb{x}))=sgn(\sum_{t=1}^T\alpha_th_t(\pmb{x}))sign(F(xxx))=sgn(t=1∑Tαtht(xxx))
3.Adaboost算法证明:
3.1随着迭代的进行,强分类器的误差函数会以指数级下降
思考这样一个问题:在一般的经验中,如果把好坏不等的东西掺在一起,那么通常结果会是比最坏的要好一些,比最好的要坏一些。那么集成学习把多个学习器结合起来,一定比最好的单一学习器的性能更好吗?
et=1l∑i=1lIsgn(F(xi)≠yiI≤∏t=1TZte_t=\frac{1}{l}\sum_{i=1}^l\mathbb Isgn(F(\pmb{x_i})\neq y_i\mathbb I\leq\prod_{t=1}^TZ_tet=l1i=1∑lIsgn(F(xixixi)=yiI≤t=1∏TZt
注释:I.I\mathbb I.\mathbb II.I为指示函数,为真输出1,为假输出0。
首先证明下面的不等式成立:
Isgn(F(xi)≠yiI≤exp(−yiF(xi))\mathbb Isgn(F(\pmb{x_i})\neq y_i\mathbb I\leq exp(-y_iF(\pmb{x_i}))Isgn(F(xixixi)=yiI≤exp(−yiF(xixixi))
如果样本被分错则有:
Isgn(F(xi)≠yiI=1\mathbb Isgn(F(\pmb{x_i})\neq y_i\mathbb I=1Isgn(F(xixixi)=yiI=1
样本被错分意味着yiy_iyi和F(xi)F(\pmb{x_i})F(xixixi)异号,因此:
−yiF(xi)>0-y_iF(\pmb{x_i})>0−yiF(xixixi)>0
从而有:
exp(−yiF(xi))>exp(0)=1exp(-y_iF(\pmb{x_i}))>exp(0)=1exp(−yiF(xixixi))>exp(0)=1
如果样本被正确分类,则有:
Isgn(F(xi)≠yiI=0\mathbb Isgn(F(\pmb{x_i})\neq y_i\mathbb I=0Isgn(F(xixixi)=yiI=0
而对任意的xxx都有ex>0e^x>0ex>0恒成立
按照权重更新公式,有:
wit=wit−1exp(−yiαtht(xi))Ztw_i^t=\frac{w_i^{t-1}exp(-y_i\alpha_th_t(\pmb{x_i}))}{Z_t}wit=Ztwit−1exp(−yiαtht(xixixi))
将等式两边同乘以归一化因子,可以得到:
wit−1exp(−yiαtht(xi))=witZtw_i^{t-1}exp(-y_i\alpha_th_t(\pmb{x_i}))=w_i^tZ_twit−1exp(−yiαtht(xixixi))=witZt
反复利用上面这个等式,可以将ZtZ_tZt提出。假设样本初始权重为wi0=1lw_i^0=\frac{1}{l}wi0=l1,因此有:
1l∑i=1lexp(−yiF(xi))=1l∑i=1lexp(−yi∑t=1Tαtht(xi))\frac{1}{l}\sum_{i=1}^lexp(-y_iF(\pmb{x_i}))=\frac{1}{l}\sum_{i=1}^lexp(-y_i\sum_{t=1}^T\alpha_th_t(\pmb{x_i}))l1i=1∑lexp(−yiF(xixixi))=l1i=1∑lexp(−yit=1∑Tαtht(xixixi))
=∑i=1lwi0exp(−yi∑t=1Tαtht(xi))=\sum_{i=1}^lw_i^0exp(-y_i\sum_{t=1}^T\alpha_th_t(\pmb{x_i}))=i=1∑lwi0exp(−yit=1∑Tαtht(xixixi))
=∑i=1lwi0exp(−yiα1h1(xi)exp(−yi∑t=2Tαtht(xi))=\sum_{i=1}^lw_i^0exp(-y_i\alpha_1h_1(\pmb{x_i})exp(-y_i\sum_{t=2}^T\alpha_th_t(\pmb{x_i}))=i=1∑lwi0exp(−yiα1h1(xixixi)exp(−yit=2∑Tαtht(xixixi))
=∑i=1lZ1wi1exp(−yi∑t=2Tαtht(xi))=\sum_{i=1}^lZ_1w_i^1exp(-y_i\sum_{t=2}^T\alpha_th_t(\pmb{x_i}))=i=1∑lZ1wi1exp(−yit=2∑Tαtht(xixixi))
…\ldots…
=∏t=1TZt=\prod_{t=1}^TZ_t=t=1∏TZt
结合前面两个结论,有:
1l∑i=1lIsgn(F(xi)≠yiI≤1l∑i=1lexp(−yiF(xi))=∏t=1TZt\frac{1}{l}\sum_{i=1}^l\mathbb Isgn(F(\pmb{x_i})\neq y_i\mathbb I\leq\frac{1}{l}\sum_{i=1}^lexp(-y_iF(\pmb{x_i}))=\prod_{t=1}^TZ_tl1i=1∑lIsgn(F(xixixi)=yiI≤l1i=1∑lexp(−yiF(xixixi))=t=1∏TZt
其次证明下面的不等式成立:
∏t=1TZt=∏t=1T2et(1−et)=∏t=1T(1−4γt2)≤exp(−2∑t=1Tγt2) γt=12−et\prod_{t=1}^TZ_t=\prod_{t=1}^T2\sqrt{e_t(1-e_t)}=\prod_{t=1}^T\sqrt{(1-4\gamma_t^2)}\leq exp(-2\sum_{t=1}^T\gamma_t^2)\ \ \ \gamma_t=\frac{1}{2}-e_tt=1∏TZt=t=1∏T2et(1−et)=t=1∏T(1−4γt2)≤exp(−2t=1∑Tγt2) γt=21−et
根据误差函数和归一化因子的计算公式有:
Zt=∑i=1lwit−1exp(−yiαtht(xi))Z_t=\sum_{i=1}^lw_i^{t-1}exp(-y_i\alpha_th_t(\pmb{x_i}))Zt=i=1∑lwit−1exp(−yiαtht(xixixi))
Zt=∑i=1,yi=ht(xi)lwit−1exp(−αt)+∑i=1,yi≠ht(xi)lwit−1exp(−αt)Z_t=\sum_{i=1,y_i=h_t(x_i)}^lw_i^{t-1}exp(-\alpha_t)+\sum_{i=1,y_i\neq h_t(x_i)}^lw_i^{t-1}exp(-\alpha_t)Zt=i=1,yi=ht(xi)∑lwit−1exp(−αt)+i=1,yi=ht(xi)∑lwit−1exp(−αt)
因为:
et=∑i=1lwit−1∣ht(xi)−yi∣2∑i=1lwit−1=∑i=1,yi≠ht(xi)lwit−1e_t=\frac{\sum_{i=1}^lw_i^{t-1}|h_t(\pmb{x_i})-y_i|}{2\sum_{i=1}^lw_i^{t-1}}=\sum_{i=1,y_i\neq h_t(x_i)}^lw_i^{t-1}et=2∑i=1lwit−1∑i=1lwit−1∣ht(xixixi)−yi∣=i=1,yi=ht(xi)∑lwit−1
所以:
Zt=(1−et)exp(−αt)+etexp(−αt)Z_t=(1-e_t)exp(-\alpha_t)+e_texp(-\alpha_t)Zt=(1−et)exp(−αt)+etexp(−αt)
由:
αt=12log(1−etet)\alpha_t=\frac{1}{2}\log (\frac{1-e_t}{e_t})αt=21log(et1−et)
得出:
Zt=2et(1−et)=1−4γt2, γt=12−etZ_t=2\sqrt{e_t(1-e_t)}=\sqrt{1-4\gamma_t^2},\ \ \ \gamma_t=\frac{1}{2}-e_tZt=2et(1−et)=1−4γt2, γt=21−et
当et=0.5e_t=0.5et=0.5时,2et(1−et)2\sqrt{e_t(1-e_t)}2et(1−et)有极大值1,既Zt=1Z_t=1Zt=1。弱分类器能够保证et≤0.5e_t\leq0.5et≤0.5,因此有Zt<1Z_t<1Zt<1。每增加一个弱分类器,强分类器误差函数的上界都会乘上一个小于1的因子,上述结论在理论上保证了算法在训练集上的误差上界会随着弱分类器个数的增加而减少。
接下来我们证明下面的不等式成立:
(1−4γt2)≤exp(−2γt2) \sqrt{(1-4\gamma_t^2)}\leq exp(-2\gamma_t^2)\ (1−4γt2)≤exp(−2γt2)
等价证明:
γ2=x, x≥0\gamma^2=x,\ \ \ x\geq0γ2=x, x≥0
1−4x≤(e−2x)21-4x\leq(e^{-2x})^21−4x≤(e−2x)2
构造如下函数:
f(x)=(e−2x)2−1+4xf(x)=(e^{-2x})^2-1+4xf(x)=(e−2x)2−1+4x
其导数为:
f′(x)=4−4(e−2x)2≥0f\prime(x)=4-4(e^{-2x})^2\geq0f′(x)=4−4(e−2x)2≥0
这是个增函数,且x≥0x\geq0x≥0,当x=0x=0x=0时,f(x)f(x)f(x)取最小值为0,所以f(x)≥0f(x)\geq0f(x)≥0
因此证明:1−4x≤(e−2x)21-4x\leq(e^{-2x})^21−4x≤(e−2x)2
最后证明:
et≤exp(−2∑t=1Tγt2) e_t\leq\exp(-2\sum_{t=1}^T\gamma_t^2)\ et≤exp(−2t=1∑Tγt2)
最终得出结论:误差函数会以指数级下降。
3.2证明Adaboost算法,既证明为什么弱分类器的权重αt=12log(1−etet)\alpha_t=\frac{1}{2}\log (\frac{1-e_t}{e_t})αt=21log(et1−et),为什么权重更新公式为wit=wit−1exp(−yiαtht(xi))w_i^t=w_i^{t-1}exp(-y_i\alpha_th_t(\pmb{x_i}))wit=wit−1exp(−yiαtht(xixixi))
Adaboost算法由广义加法模型和指数损失函数导出。
广义加法模型是多个基函数的线性组合,模型参数包括基函数的参数以及权重:
F(x)=∑t=1Tαtht(x;γt), αt>0F(\pmb{x})=\sum_{t=1}^T\alpha_th_t(\pmb{x};\gamma_t),\ \ \ \alpha_t>0F(xxx)=t=1∑Tαtht(xxx;γt), αt>0
优化的损失函数为:
minαt,γtL(yi,∑t=1Tαtht(x;γt))min_{\alpha_t,\gamma_t} L(y_i,\sum_{t=1}^T\alpha_th_t(\pmb{x};\gamma_t))minαt,γtL(yi,t=1∑Tαtht(xxx;γt))
训练时逐步迭代,依次确定每个基函数的参数(准则:分错的样本对应的权值之和最小)、权重值(后面做推导)。广义加法模型是一个抽象概念,基函数的形式不同,损失函数的形式不同,可以导出多种具体的机器学习算法。Adaboost的基函数使用的是决策树,损失函数使用的是指数损失函数。
指数损失函数:
L(y,F(x))=exp(−yF(x))L(y,F(\pmb{x}))=exp(-yF(x))L(y,F(xxx))=exp(−yF(x))
模型的预测值与样本的真实标签值越接近,其值越小 。
训练时的优化目标:
(αt,ht)=arg minαt,ht∑i=1lexp(−yiFt(xi))(\alpha_t,h_t)=arg\ min_{\alpha_t,h_t} \sum_{i=1}^lexp(-y_iF_t(\pmb{x_i}))(αt,ht)=arg minαt,hti=1∑lexp(−yiFt(xixixi))
(αt,ht)=arg minαt,ht∑i=1lexp(−yi(Ft−1(xi)+αtht(xi)))(\alpha_t,h_t)=arg\ min_{\alpha_t,h_t} \sum_{i=1}^lexp(-y_i(F_{t-1}(\pmb{x_i})+\alpha_th_t(\pmb{x_i})))(αt,ht)=arg minαt,hti=1∑lexp(−yi(Ft−1(xixixi)+αtht(xixixi)))
(αt,ht)=arg minαt,ht∑i=1lexp(−yiFt−1(xi))exp(−αtyiht(xi))(\alpha_t,h_t)=arg\ min_{\alpha_t,h_t} \sum_{i=1}^lexp(-y_iF_{t-1}(\pmb{x_i}))exp(-\alpha_ty_ih_t(\pmb{x_i}))(αt,ht)=arg minαt,hti=1∑lexp(−yiFt−1(xixixi))exp(−αtyiht(xixixi))
之前得到的强分类器可以当作常数,因此损失函数是关于当前要训练的弱分类器以及弱分类器权重的函数:
令:
wit−1=exp(−yiFt−1(xi))w_i^{t-1}=exp(-y_iF_{t-1}(\pmb{x_i}))wit−1=exp(−yiFt−1(xixixi))
得出优化的损失函数:
minαt,ht∑i=1lwit−1exp(−αtyiht(xi))min_{\alpha_t,h_t} \sum_{i=1}^lw_i^{t-1}exp(-\alpha_ty_ih_t(\pmb{x_i}))minαt,hti=1∑lwit−1exp(−αtyiht(xixixi))
分段优化,首先将弱分类器权重当作常数,寻找最优的弱分类器。只有当弱分类器的预测值与样本的真实标签值一致时,函数有极小值。
ht=arg minh∑i=1lwit−1I(yi≠h(xi))h_t=arg\ min_h\sum_{i=1}^lw_i^{t-1}I(y_i\neq h(\pmb{xi}))ht=arg minhi=1∑lwit−1I(yi=h(xixixi))
注释:I(yi≠h(xi))I(y_i\neq h(\pmb{xi}))I(yi=h(xixixi))的意思是满足条件取1,不满足条件取0,为取得最小值尽量不去满足条件(尽量让yi=h(xi)y_i=h(\pmb{xi})yi=h(xixixi)),从而取得更多的0。
得到弱分类器后,在优化它的权重系数。
之前的优化函数为:
minαt,ht∑i=1lwit−1exp(−αtyiht(xi))min_{\alpha_t,h_t} \sum_{i=1}^lw_i^{t-1}exp(-\alpha_ty_ih_t(\pmb{x_i}))minαt,hti=1∑lwit−1exp(−αtyiht(xixixi))
在此基础上分为预测正确和预测错误两部分:
e−αt∑yi=ht(xi)wit−1+eαt∑yi≠ht(xi)wit−1e^{-\alpha_t}\sum_{yi=h_t(x_i)}w_i^{t-1}+e^{\alpha_t}\sum_{yi\neq h_t(x_i)}w_i^{t-1}e−αtyi=ht(xi)∑wit−1+eαtyi=ht(xi)∑wit−1
=e−αt∑yi=ht(xi)wit−1+e−αt∑yi≠ht(xi)wit−1−e−αt∑yi≠ht(xi)wit−1+eαt∑yi≠ht(xi)wit−1=e^{-\alpha_t}\sum_{yi=h_t(x_i)}w_i^{t-1}+e^{-\alpha_t}\sum_{yi\neq h_t(x_i)}w_i^{t-1}-e^{-\alpha_t}\sum_{yi\neq h_t(x_i)}w_i^{t-1}+e^{\alpha_t}\sum_{yi\neq h_t(x_i)}w_i^{t-1}=e−αtyi=ht(xi)∑wit−1+e−αtyi=ht(xi)∑wit−1−e−αtyi=ht(xi)∑wit−1+eαtyi=ht(xi)∑wit−1
=e−αt∑i=1lwit−1+(eαt−e−αt)∑yi≠ht(xi)wit−1=e^{-\alpha_t}\sum_{i=1}^lw_i^{t-1}+(e^{\alpha_t}-e^{-\alpha_t})\sum_{yi\neq h_t(x_i)}w_i^{t-1}=e−αti=1∑lwit−1+(eαt−e−αt)yi=ht(xi)∑wit−1
=e−αt∑i=1lwit−1+(eαt−e−αt)∑i=1lwit−1I(yi≠h(xi))=e^{-\alpha_t}\sum_{i=1}^lw_i^{t-1}+(e^{\alpha_t}-e^{-\alpha_t})\sum_{i=1}^lw_i^{t-1}I(y_i\neq h(\pmb{xi}))=e−αti=1∑lwit−1+(eαt−e−αt)i=1∑lwit−1I(yi=h(xixixi))
损失函数为:
L(αt)=e−αt∑i=1lwit−1+(eαt−e−αt)∑i=1lwit−1I(yi≠h(xi))L(\alpha_t)=e^{-\alpha_t}\sum_{i=1}^lw_i^{t-1}+(e^{\alpha_t}-e^{-\alpha_t})\sum_{i=1}^lw_i^{t-1}I(y_i\neq h(\pmb{xi}))L(αt)=e−αti=1∑lwit−1+(eαt−e−αt)i=1∑lwit−1I(yi=h(xixixi))
求解损失函数的最小值,在极值点处导数必须为0:
(eαt+e−αt)∑i=1lwit−1I(yi≠h(xi))−e−αt∑i=1lwit−1=0(e^{\alpha_t}+e^{-\alpha_t})\sum_{i=1}^lw_i^{t-1}I(y_i\neq h(\pmb{xi}))-e^{-\alpha_t}\sum_{i=1}^lw_i^{t-1}=0(eαt+e−αt)i=1∑lwit−1I(yi=h(xixixi))−e−αti=1∑lwit−1=0
两边同除以∑i=1lwit−1\sum_{i=1}^lw_i^{t-1}∑i=1lwit−1,化简得:
(eαt+e−αt)errt−e−αt=0(e^{\alpha_t}+e^{-\alpha_t})err_t-e^{-\alpha_t}=0(eαt+e−αt)errt−e−αt=0
errt=∑i=1lwit−1I(yi≠h(xi))∑i=1lwit−1err_t=\frac{\sum_{i=1}^lw_i^{t-1}I(y_i\neq h(\pmb{xi}))}{\sum_{i=1}^lw_i^{t-1}}errt=∑i=1lwit−1∑i=1lwit−1I(yi=h(xixixi))
最优解为:
αt=12log1−errterrt\alpha_t=\frac{1}{2}\log\frac{1-err_t}{err_t}αt=21logerrt1−errt
4.Adaboost实现的几个细节:
4.1弱分类器的选择
选择的原则:简单,精度不用太高(要大于50%),要用非线性的
一般用决策树,而且深度很小
4.2弱分类器的数量
前面的3.1已经证明,随着迭代的进行,强分类器的误差函数会以指数级下降,通常的做法是指定一个阈值(例如0.95),当训练样本的准确率大于此阈值的时候,停止迭代。如果继续迭代,可能出现过拟合的现象。
4.3样本权重削减
随着迭代的进行,被正确分类的样本权重越来越小,趋向于0,对后续的训练作用不大,可以剔除这些权重非常小的样本。常用的做法是,对所有样本的权重值从小到大排序,将最小端的一定比例的样本(例如将权重值最小的10%的样本)削减掉。