1.前情回顾
上一节有讲到集成学习个体学习器之间根据是否存在依赖关系可以分为强依赖关系,以及不存在强依赖关系。强依赖关系代表算法:boosting系列算法,在boosting系列算法中,adaboost既可以作为分类,又可以作为回归。下面对adaboost做一个总结。
复习Boosting算法流程
对于m个训练样本,根据初始化权重,训练出弱学习器1,根据弱学习器的学习误差率表现来重新更新样本的权重,使得之前弱学习器1学习误差率高的样本点权重变高(学习误差率高的样本点指:分类错误/回归预测后差距很大),使得这些样本点在弱学习器2中可以得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2,重复进行,直到训练次数达到事先指定的弱学习器数量T,最后将这些弱学习器按照一定的集成策略进行整合,最终得到强学习器。
之前讲到Boosting算法没有详细说明一下问题:
1)如何计算学习误差率e?
2) 如何得到弱学习器权重系数α?
3)如何更新样本权重D?
4)使用何种结合策略?
下面给出Adaboost解决这四个问题的思路!
3.Adaboost算法的基本思路
假设我们的训练集样本是:
T = {(x,y_1),(x,y_2),...,(x,y_T)}
训练集在第k个弱学习器的输出权重为:
D(k) = (w_{k1},w_{k2},...,w_{km});
w_{1i} = 1/m;
i = 1,2,3,...,m
1)Adaboost的分类问题
分类问题的误差率很好理解。由于多元分类是二元分类法的推广,我们这里假设的也是二元分类问题,输出为{-1,1},则第k个弱分类器G_k(x)在训练集上的加权误差率为
e_k = P(G_k(x_i) \neq y_i) = \sum\limits_{i=1}^{m}w_{ki}I(G_k(x_i) \neq y_i)
弱分类器权重系数,对于二分类问题,第k个弱分类器G_k(x)的权重系数为
\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k}
q:为什么这么计算权重系数呢?
a:从上面的公式可以知道,如果分类误差率e_k越大,对应的弱分类器权重系数越小。也就是说,误差小的弱分类器权重系数越大。(具体为什么使用这个式子,等到将Adaboost的优化问题时再讲)
第三个问题:如何更新权重D?假设第k个弱分类器的样本权重系数为
D(k) = (w_{k1},w_{k2},w_{k3},...,w_{km})
则对应的第k+1个弱分类器的样本权重系数为
w_{k+1,i} = \frac{w_{ki}}{Z_K}exp(-\alpha_ky_iG_k(x_i))
其中,
Z_k是规范化因子
Z_k = \sum\limits_{i=1}^{m}w_{ki}exp(-\alpha_ky_iG_k(x_i))
从
权重系数计算公式可以看出,如果第i个样本分类错误,
则y_iG_k(x_i) < 0,
导致样本的权重在第k+1个弱分类器中增大,如果分类正确,则权重在第k+1个弱分类器中减少。
最后一个问题是集合策略。Adaboost分类采用的是加权表决法,最终的强分类器为
f(x) = sign(\sum\limits_{k=1}^{K}\alpha_kG_k(x))
2)Adaboost的回归问题
对于第k个弱分类器,计算他在训练集上的最大误差率
E_k= max|y_i - G_k(x_i)|\;i=1,2...m
每个样本的相对误差
e_{ki}= \frac{|y_i - G_k(x_i)|}{E_k}
以上为误差损失为线性的情况,
如果我们用平方误差,则
e_{ki}= \frac{(y_i - G_k(x_i))^2}{E_k^2},
如果我们用的是指数误差,则
e_{ki}= 1 - exp(\frac{-y_i + G_k(x_i))}{E_k})
最终得到第k个弱学习器的误差率:
e_k = \sum\limits_{i=1}^{m}w_{ki}e_{ki}
对于如何得到弱学习器权重系数α,有:
\alpha_k =\frac{e_k}{1-e_k}
对于更新样本权重D,第k+1个弱分类器样本集权重为
w_{k+1,i} = \frac{w_{ki}}{Z_k}\alpha_k^{1-e_{ki}}
这里Z_k是规范化因子
Z_k = \sum\limits_{i=1}^{m}w_{ki}\alpha_k^{1-e_{ki}}
最后是结合策略,和分类问题的结合策略有所不同,采用的是对加权的弱学习器取权重中位数对应的弱学习器作为强学习器的方法,最终的强回归器为:
f(x) =G_{k^*}(x)
其中,G_{k^*}(x)是所有ln\frac{1}{\alpha_k}, k=1,2,....K的中位数值对应序号k^*对应的弱学习器。
3.Adaboost分类问题的损失函数
之前有讲过分类Adaboost的弱学习器权重系数公式以及样本权重更新公式,但是没有给出具体的解释,其实它可以由Adaboost的损失函数推导而来。
从某种角度来说,Adaboost是模型为假发模型,学习算法为前向分布算法,损失函数为指数损失函数的分类问题。
(具体怎么理解不详说)
Adaboost的损失函数为
\underbrace{arg\;min\;}_{\alpha, G} \sum\limits_{i=1}^{m}exp(-y_if_{k}(x))
利用前向分布算法的关系可以得到损失函数为:
(\alpha_k, G_k(x)) = \underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}exp[(-y_i) (f_{k-1}(x) + \alpha G(x))]
令
w_{ki}^{’} = exp(-y_if_{k-1}(x))
它的值不依赖于α,因此与最小化无关,仅仅依赖于
f_{k-1}(X)
随着每一轮迭代而改变。将这个式子带入到损失函数中,损失函数转换为
(\alpha_k,G_k(x)) = \underbrace{arg\;min\;}_{\alpha,G}\sum\limits_{i=1}^{m}w_{ki}^{'}exp[-y_i\alpha G(x)]
基于上式,可以得到
未完待续…
参考刘建平老师博客