统计学习方法(7)前向分步算法推导AdaBoost的详细过程

由前向分步算法可以推导AdaBoost,用定理叙述这一关系:

定理:
AdaBoost算法是前向分步加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。

证明:
前向分步算法学习的是加法模型,当基函数为基本分类器时,该加法模型等价于AdaBoost的最终分类器:
f(x)=m=1MαmGm(x)f(x) = \sum_{m=1}^{M} \alpha_{m}G_{m}(x)
由基本分类器Gm(x)G_{m}(x)及其系数αm\alpha_{m}组成,m=1,2,,Mm=1, 2, …, M。前向分步算法逐一学习基函数,这一过程与AdaBoost 算法逐一学习基本分类器的过程一致。下面证明前向分步算法的损失函数是指数损失函数(exponential loss function):
L(y,f(x))=exp[yf(x)]L(y, f(x))=exp[-yf(x)]时,其学习的具体操作等价于AdaBoost算法学习的具体操作。

假设经过m1m-1轮迭代前向分步算法已经得到fm1(x)f_{m-1}(x)
fm1(x)=fm2(x)+αm1Gm1(x)=α1G1(x)+...+αm1Gm1(x) \begin{aligned} f_{m-1}(x) &= f_{m-2}(x) + \alpha_{m-1}G_{m-1}(x) \\ &= \alpha_{1}G_{1}(x) + ... + \alpha_{m-1}G_{m-1}(x) \end{aligned}

在第m轮迭代得到αm\alpha_{m}Gm(x)G_{m}(x)fm(x)f_{m}(x)
fm(x)=fm1(x)+αmGm(x)f_{m}(x) = f_{m-1}(x) + \alpha_{m}G_{m}(x)
目标是使前向分步算法得到的αm\alpha_{m}Gm(x)G_{m}(x)使fm(x)f_{m}(x)在训练集T上的指数损失最小,即:
(1)(αm,Gm(x))=argminα,Gi=1NL(yi,fm(x))=argminα,Gi=1Nexp[yi(fm1(xi)+αG(xi))] \begin{aligned} (\alpha_m,G_{m}(x)) & = \arg\min_{\alpha,G} \sum_{i=1}^N L(y_i, f_{m}(x)) \\ & = \arg\min_{\alpha,G} \sum_{i=1}^N exp[-y_i(f_{m-1}(x_i)+\alpha G(x_i))] \tag1 \end{aligned}

注:
对于回归问题,前向分步算法的损失函数可以选平方损失,即
L(yi,f(x))=(yif(x))2L(y_i,f(x)) = (y_i - f(x))^2
所以有:
L(yi,fm1(xi)+αG(xi))=(yifm1(xi)αG(xi))2=(rmiαG(xi))2 \begin{aligned} L(y_i,f_{m-1}(x_i)+\alpha G(x_i)) & = (y_i - f_{m-1}(x_i) - \alpha G(x_i))^2 \\ & = (r_{mi} - \alpha G(x_i))^2 \end{aligned}
其中rmi=(yifm1(xi))r_{mi}= (y_i - f_{m-1}(x_i)),这就是当前模型的残差,为了获取 αG(xi)\alpha G(x_i),也就是令其去拟合当前模型的残差。
  \;
AdaBoost是个分类器,对于分类问题,平方损失就不太适合了。所以引入指数损失。

将(1)式写为:
(2)(αm,Gm)=argminα,Gi=1Nwmiexp(αyiG(xi)) \begin{aligned} (\alpha_m,G_m) = \arg\min_{\alpha,G} \sum_{i=1}^N \overline{w}_{mi} exp(-\alpha y_i G(x_i)) \end{aligned} \tag2
其中,wmi=exp(yifm1(xi))\overline{w}_{mi} = exp(-y_i f_{m-1}(x_i))。因为wmi\overline{w}_{mi}既不依赖α\alpha也不依赖于GG,所以与最小化无关。但wmi\overline{w}_{mi}依赖于fm1(x)f_{m-1}(x),随着每一轮迭代而发生改变。

现证使式(2)达到最小的αm\alpha_{m}^{*}Gm(x)G^{*}_{m}(x)就是AdaBoost算法所得到的αm\alpha_{m}Gm(x)G_{m}(x)。求解(2)式可分两步:

第一步:求Gm(x)G^{*}_{m}(x)

因为yi{1,1}y_i∈\{−1,1\},且yiy_i要么等于G(xi)G(x_i),要么不等于,所以将上述公式拆成两部分。PS:暂时省略argminargmin
i=1Nwmiexp(αyiG(xi))=eαyi=Gm(xi)wmi+eαyi≠Gm(xi)wmi=eαyi=Gm(xi)wmi+eαyi≠Gm(xi)wmi+eαyi≠Gm(xi)wmieαyi≠Gm(xi)wmi \begin{aligned} \sum_{i=1}^N & \overline{w}_{mi} exp(-\alpha y_i G(x_i)) \\ & = e^{-\alpha} \sum_{y_i=G_m(x_i)} \overline w_{mi} + e^{\alpha} \sum_{y_{i} = \not G_{m}(x_i)} \overline w_{mi} \\ & = e^{-\alpha} \sum_{y_i=G_m(x_i)} \overline w_{mi} + e^{\alpha} \sum_{y_i = \not G_m(x_i)} \overline w_{mi} + e^{-\alpha} \sum_{y_{i} = \not G_m(x_i)} \overline w_{mi} - e^{-\alpha} \sum_{y_i = \not G_m(x_i)} \overline w_{mi} \\ \end{aligned}

上式合并,得到:
(3)(eαeα)i=1NwmiI(yi≠Gm(xi))+eαi=1Nwmi \begin{aligned} (e^{\alpha} - e^{-\alpha}) \sum_{i=1}^N \overline w_{mi} I(y_i = \not G_m(x_i)) + e^{-\alpha} \sum_{i=1}^N \overline w_{mi} \tag 3 \end{aligned}

对于迭代的第mm步,假设α\alpha为常数,那么上式第二项以及(eαeα)(e^{\alpha} - e^{-\alpha})都可以看成常数,要让损失函数取得最小值,只需使i=1NwmiI(yi≠Gm(xi))\sum_{i=1}^N \overline w_{mi} I(y_i = \not G_m(x_i))取最小值。因此有:
Gm(x)=argminGi=1NwmiI(yi≠G(xi))G^{*}_{m}(x) = \arg\min_G \sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i))此分类器Gm(x)G^{*}_{m}(x)即为AdaBoost算法的基本分类器Gm(x)G_{m}(x),因此它是第m轮加权训练数据分类误差率最小的基本分类器。

第二步:求αm\alpha^{*}_{m}

现假设GmG_m已知的情况下,回到公式(3)。此时的变量为α\alpha,要让损失函数取得最小值,先对α\alpha求偏导,得到:
Lα=eαi=1NwmiI(yi≠G(xi))+eαi=1NwmiI(yi≠G(xi))eαi=1Nwmi \frac {\partial_L} {\partial_{\alpha}} = e^{\alpha} \sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i)) + e^{-\alpha} \sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i)) - e^{-\alpha} \sum_{i=1}^N \overline w_{mi}

再令Lα=0\frac {\partial_L} {\partial_{\alpha}} = 0,得:
eαi=1NwmiI(yi≠G(xi))=[i=1Nwmii=1NwmiI(yi≠G(xi))]eα e^{\alpha} \sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i)) = [\sum_{i=1}^N \overline w_{mi} - \sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i))] e^{-\alpha}
对两边同求log,得到:
logi=1NwmiI(yi≠G(xi))+logeα=log[i=1Nwmii=1NwmiI(yi≠G(xi))]+logeα log \sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i)) + log e^{\alpha} = log [\sum_{i=1}^N \overline w_{mi} - \sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i))] + log e^{-\alpha}

又因为logeα=logeαlog e^{-\alpha} = -log e^{\alpha},所以有:
logeα=12logi=1Nwmii=1NwmiI(yi≠G(xi))i=1NwmiI(yi≠G(xi)) log e^{\alpha} = \frac {1} {2} log \frac {\sum_{i=1}^N \overline w_{mi} - \sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i))} {\sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i))}
解得:
αm=12logi=1Nwmii=1NwmiI(yi≠G(xi))i=1NwiI(yi≠G(xi)) \alpha_m = \frac {1} {2} log \frac {\sum_{i=1}^N \overline w_{mi} - \sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i))} {\sum_{i=1}^N \overline w_i I(y_i = \not G(x_i))}
又因为加权误差率:
em=i=1NwmiI(yi≠G(xi))i=1Nwmi e_m = \frac {\sum_{i=1}^N \overline w_{mi} I(y_i = \not G(x_i))} {\sum_{i=1}^N \overline w_{mi}}
所以αm\alpha_m可以写成
αm=12log1emem \alpha_m = \frac {1} {2} log \frac {1 - e_m} {e_m}

求出了Gm(x)G_m(x)αm\alpha_m,就可以写出f(x)f(x)的更新公式:
fm(x)=fm1(x)+αmGm(x) f_m(x) = f_{m-1}(x) + \alpha_m G_m(x)

根据wmi=exp(yifm1(xi))\overline w_{mi} = exp(-y_i f_{m-1}(x_i)),可得ww的更新公式:
wm+1,i=exp(yifm(xi))=exp(yi(fm1(xi)+αmGm(xi)))=wm,iexp(αmyiGm(xi)) \begin{aligned} \overline w_{m+1,i} & = exp(-y_i f_m (x_i)) \\ & = exp(-y_i (f_{m-1}(x_i)+\alpha_m G_m(x_i))) \\ & = \overline w_{m,i} exp(- \alpha_m y_i G_m(x_i)) \end{aligned}
这与AdaBoost算法的样本权值更新只差规范化因子,因而等价。

这也就推导出:当前向分步算法的损失函数为指数损失时,前向分步算法就是AdaBoost。

参考:
《统计学习方法》 李航
从前向分步算法推导出AdaBoost

展开阅读全文

没有更多推荐了,返回首页