AdaBoost
AdaBoost 与随机森林一样,都是通过多个树形分类器群策群力,最后得出最终结果的集成学习模型。与随机森林不同的是,每个弱分类器并不是独立的个体,而是每一个分类器都是建立在上一个分类器基础上形成的。
AdaBoost 中每个弱分类器不再是平等的,它们的头顶上都有着一个权值 $\alpha_k$,来控制着他们的话语权:加大分类误差率小的弱分类器权值,减少分类误差率大的弱分类器权值。而每一个样本,也有着相应的权值 $w_i$,如果他在上一个弱学习器被错误分类,那么这个样本将会在下一次分类时增大权值,让下一个学习器多多照顾到这类样本。
现在有一个二分类的训练数据集
其中 $x^{(i)} \in \mathbb R^n$,$y^{(i)} \in {-1,1}$。
首先为所有的样本初始化权重分布
之后,根据训练集 $T$ 以及权值 $D_1$ 对弱学习器 $G_1$ 进行训练,计算在训练集上的误差率 $e_1$
从上式可以看出误差率就是被分类错误的样本所对应的权值之和。
再之后,计算 $G_1$ 的系数 $\alpha_1$
当 $e_1\leq\frac 1 2$ 时,$\alpha_1 \geq 0$,并且 $\alpha_1$ 随着 $e_1$ 的减小而增大。当然,如果 $e_1>\frac 1 2$,那这个分类器就和瞎猜没什么两样了。
第一个训练器 $G_1$ 就已经训练好了,下面更新数据集的权值分布 $D_2$
其中 $Z_1$ 是规范化因子
如果将分类正确与分类错误分开来看,就会有
如果样本被分类错误,那么权值就会被扩大。
之后便可以继续迭代,生成更多的训练模型 $G_2,G_3,\dots,G_K$。
得到所有分类器的线性组合
得到最终分类器
误差分析
这里的误差指的是训练误差,在研究 AdaBoost 之前,先说一下加权线性规划。
加权最小二乘
刚接触 AdaBoost 的时候很是疑惑,这个带权重的分类器到底应该如何训练。发现样本加权这个事情在最小二乘法中就有应用。
如果样本 $x^{(i)}$ 的权重为 $wi$;$\sum_i w_i = 1$,训练出的学习器为 $f\theta(x)$,评价模型的代价函数 $J(\theta)$ 为:
是这样的,在每项的代价函数前面乘上自己的权重,就是加权最小二乘法了。
下面来说 AdaBoost,根据训练误差分析,可知 AdaBoost 算法的最终分类器的误差训练界为
具体的推导过程可以看《统计学习方法》的 142 页。
👇
通过上不等式可以发现,在每一轮选取适当的 $G_k$ 可以使的 $Z_k$ 最小,则会让训练误差快速下降。
再看
$Z_k$ 像不像是上面的代价函数 $J(\theta)$。那么选取适当的 $G_k$ 可以使的 $Z_k$ 最小这一句可不可以近似称线性规划中的:选取适当的 $f$ 可以使得 $J(\theta)$ 最小。
👆
对于二分类问题,有
若存在 $\gamma>0$,对所有 $k$ 有 $\gamma_k \geq\gamma$,则
观察上式可以得出,随着弱学习器的增加,AdaBoost 的误差成指数速率下降。