机器学习----集成学习(Boosting)

Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:
先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的样本在后面受到更多关注。

AdaBoost

一直觉得AdaBoost这个名字起得好呀,全拼是Adaptive Boosting;adaptive是适应的,适合额意思。但是世界上第一个程序媛不也叫Ada嘛~
机器学习----集成学习(Boosting)_第1张图片
haha~扯远了。我们看看AdaBoost是怎么提升正确率的。

实现

在理论推导之前我们先看看它到底是怎么做的。
现在我们有训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D=\{(\mathbf{x_1},y_1),(\mathbf{x_2},y_2), ... ,(\mathbf{x_m},y_m)\} D={(x1,y1),(x2,y2),...,(xm,ym)},基学习算法 φ \varphi φ。其中 Y ∈ { − 1 , + 1 } Y\in\{-1,+1\} Y{1,+1}

  • 第一次训练我们就像平常一样,每个样例的权重为 1 / m 1/m 1/m

  • 我们为每个训练好的学习器附加权重,因为我们最后要线性求和学习器输出结果。这个权重怎么分配呢?我们让它与分类错误率挂钩。设第k个学习器的分类错误率为 ϵ k \epsilon_k ϵk,则权重为
    α k = 1 2 l n ( 1 − ϵ t ϵ t ) \alpha_k=\frac{1}{2}ln(\frac{1-\epsilon_t}{\epsilon_t}) αk=21ln(ϵt1ϵt)

  • 为了下一次的基学习器的训练,我们需要改变样本权重,大致思想为,这次分类对的缩小权重,这个分类错的,加大。这个权重的变更也跟 ϵ k \epsilon_k ϵk有关:
    D k + 1 ( x ) = D k ( x ) Z k × { e x p ( − α k ) , i f   h k ( x ) = f ( x ) e x p ( α k ) , i f   h k ( x ) ≠ f ( x ) = D k ( x ) Z k × e x p ( − α k f ( x ) h k ( x ) ) D_{k+1}(x)=\frac{D_k(\mathbf{x})}{Z_k}\times\begin{cases} exp(-\alpha_k),if h_k(\mathbf{x})=f(\mathbf{x})\\ exp(\alpha_k),if h_k(\mathbf{x})\neq f(\mathbf{x}) \end{cases}\\ =\frac{D_k(\mathbf{x})}{Z_k}\times exp(-\alpha_kf(\mathbf{x})h_k(\mathbf{x})) Dk+1(x)=ZkDk(x)×{exp(αk),if hk(x)=f(x)exp(αk),if hk(x)̸=f(x)=ZkDk(x)×exp(αkf(x)hk(x))

  • 达到训练迭代次数T,则停止,这时我们有T个训练好的学习器

  • 输出 H ( x ) = s i g n ( ∑ k = 1 T α k h k ( x ) ) H(\mathbf{x})=sign(\sum_{k=1}^{T}\alpha_kh_k(\mathbf{x})) H(x)=sign(k=1Tαkhk(x))

一些注解, ϵ k \epsilon_k ϵk大于0.5的时候则终止学习,因为正确率不足一半的学习器我们是没法用的。 Z k Z_k Zk是归一化因子,使得权重变更之后和依然为1。具体为 ∑ i = 1 m e x p ( − α k f ( x i ) h k ( x i ) ) \sum_{i=1}^m exp(-\alpha_{k}f(\mathbf{x_i})h_{k}(\mathbf{x_i})) i=1mexp(αkf(xi)hk(xi))

图解

Initialize

机器学习----集成学习(Boosting)_第2张图片

Round1

机器学习----集成学习(Boosting)_第3张图片
机器学习----集成学习(Boosting)_第4张图片

Round2

机器学习----集成学习(Boosting)_第5张图片

Round3

机器学习----集成学习(Boosting)_第6张图片

Final Strong Classifier

机器学习----集成学习(Boosting)_第7张图片

理论推导

AdaBoost算法有多重推导方式,比较容易理解的是基于“加性模型”(additive model),即学习器的线性组合来最小化指数损失函数
ℓ e x p ( H ∣ D ) = E x ∼ D [ e − f ( x ) H ( x ) ] \ell_{exp}(H|D)=E_{x\sim D}[e^{-f(x)H(x)}] exp(HD)=ExD[ef(x)H(x)]
###指数损失函数
可能这是第一次接触指数损失函数吧~我们看看这个损失函数合不合理。
我们对指数损失函数求偏导
∂ ℓ e x p ( H ∣ D ) ∂ H ( x ) = − e − H ( x ) P ( f ( x ) = 1 ∣ x ) + e H ( x ) P ( f ( x ) = − 1 ∣ x ) \frac{\partial\ell_{exp}(H|D) }{\partial H(x)}=-e^{-H(x)}P(f(x)=1|x)+e^{H(x)}P(f(x)=-1|x) H(x)exp(HD)=eH(x)P(f(x)=1x)+eH(x)P(f(x)=1x)
令上式等于0。解得:
H ( x ) = 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) H(x)=\frac{1}{2}\mathop{ln}\frac{P(f(x)=1|x)}{P(f(x)=-1|x)} H(x)=21lnP(f(x)=1x)P(f(x)=1x)
因此,有
s i g n ( H ( x ) ) = s i g n ( 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) ) = { 1 ,   P ( f ( x ) = 1 ∣ x ) > P ( f ( x ) = − 1 ∣ x ) − 1 ,   P ( f ( x ) = 1 ∣ x ) < P ( f ( x ) = − 1 ∣ x ) = a r g m a x y ∈ − 1 , 1 P ( f ( x ) = y ∣ x ) sign(H(x))=sign(\frac{1}{2}\mathop{ln}\frac{P(f(x)=1|x)}{P(f(x)=-1|x)})\\ =\begin{cases}1, P(f(x)=1|x)>P(f(x)=-1|x)\\ -1, P(f(x)=1|x)<P(f(x)=-1|x) \end{cases} \\=\mathop{argmax}_{y\in {-1,1}}P(f(x)=y|x) sign(H(x))=sign(21lnP(f(x)=1x)P(f(x)=1x))={1, P(f(x)=1x)>P(f(x)=1x)1, P(f(x)=1x)<P(f(x)=1x)=argmaxy1,1P(f(x)=yx)
这意味着 s i g n ( H ( x ) ) sign(H(x)) sign(H(x))达到了贝叶斯最优错误率。若指数损失函数最小化,则分类错误率也将最小化;这就说明指数损失函数是分类任务原本0/1损失函数的一致的(consistent)替代损失函数。
###学习器权重计算公式
在AdaBoost算法中,第一个基分类器 h 1 h_1 h1,是通过直接将基学习算法用于初始数据分布而得;伺候迭代地生成 h k h_k hk α k \alpha_k αk当基分类器 h k h_k hk基于分布 D k D_k Dk产生后,该基分类器的权重 α k \alpha_k αk应该使得 α k h k \alpha_kh_k αkhk最小化指数损失函数

ℓ e x p ( α k h k ∣ D k ) = E x ∼ D k [ e − f ( x ) α k h k ( x ) ] = E x ∼ D k [ e − α k I I ( f ( x ) = h k ( x ) ) + e α k I I ( f ( x ) ≠ h k ( x ) ) ] = e − α k P x ∼ D t ( f ( x ) = h k ( x ) ) + e α k P x ∼ D k ( f ( x ) ≠ h k ( x ) ) = e α k ( 1 − ϵ k ) + ϵ α k ϵ k \ell_{exp}(\alpha_kh_k|D_k)=E_{x\sim D_k}[e^{-f(x)\alpha_kh_k(x)}]\\ =E_{x\sim D_k}[e^{-\alpha_k}II(f(x)=h_k(x))+e^{\alpha_k}II(f(x)\neq h_k(x))]\\ =e^{-\alpha_k}P_{x\sim D_t}(f(x)=h_k(x))+e^{\alpha_k}P_{x\sim D_k}(f(x)\neq h_k(x))\\ =e^{\alpha_k}(1-\epsilon_k)+\epsilon^{\alpha_k}\epsilon_k exp(αkhkDk)=ExDk[ef(x)αkhk(x)]=ExDk[eαkII(f(x)=hk(x))+eαkII(f(x)̸=hk(x))]=eαkPxDt(f(x)=hk(x))+eαkPxDk(f(x)̸=hk(x))=eαk(1ϵk)+ϵαkϵk
考虑指数损失函数的导数:
∂ ℓ e x p ( α k h k ∣ D k ) ∂ α k = − e − α k ( 1 − ϵ k ) + e α k ϵ k \frac{\partial\ell_{exp}(\alpha_kh_k|D_k)}{\partial\alpha_k}=-e^{-\alpha_k}(1-\epsilon_k)+e^{\alpha_k}\epsilon_k αkexp(αkhkDk)=eαk(1ϵk)+eαkϵk
令其为0,得:
α k = 1 2 l n ( 1 − ϵ k ϵ k ) \alpha_k=\frac{1}{2}\mathop{ln}(\frac{1-\epsilon_k}{\epsilon_k}) αk=21ln(ϵk1ϵk)

样本权重更新公式

太长了同学们自己看西瓜书吧~

总结

关于样本权重,可以重采样法
从偏置-方差分解方面考虑,Boosting主要关注降低偏差。

过拟合

Boosting算法不容易(不会)overfitting。理论解释看margin theory。

参考:
周志华《机器学习》
中科院计算所山世光老师课件

你可能感兴趣的:(机器学习----集成学习(Boosting))