Boosting(提升)
Boosting 是一类算法的统称,它们的主要特点是使用一组弱分类器来构造一个强分类器。弱分类器意思是预测的准确性不高,可能只比随便乱猜稍好一点。强分类器指准确性较高的分类器。简单来说的话,Boosting 可以理解为俗话所说的“三个臭皮匠顶个诸葛亮”。
Boosting 并没有规定具体的实现方法,不过大多数实现算法会有以下特点:
- 通过迭代生成多个弱分类器
- 将这些弱分类器组合成一个强分类器,通常会根据各弱分类器的准确性设置相应的权重
- 每生成一个弱分类器,会重新设置训练样本的权重,被错误分类的样本会增加权重,正确分类的样本会减少权重,即后续生成的分类器将更多的关注之前分错的样本。(不过也有些算法会对总是分错的样本降低权重,视之为噪音)
Boosting家族有一系列算法,常见的比如 AdaBoost、GDBT、XGBoost,还有 BrownBoost、LogitBoost、RankBoost 等等。
Bagging/Boosting/Stacking
顺便说一下几种集成学习(Ensemble)方法的区别,集成方法是指构造多种模型,并通过一定的方法组合起来,综合下来的预测效果高于单个模型的预测效果。
集成学习有几种方式,Boosting原理 中有几张图很直观,借用在这里。
Bagging/投票
Bagging 是一种投票机制,先生成多个模型,然后让它们投票决定最终的结果。典型的比如随机森林算法。
Boosting/迭代提升
Boosting 是迭代生成模型,每个模型要基于上一次模型的效果。每次迭代,模型会关注之前的模型预测效果不好的那些样本。本文下面要讲述的就属于这类算法。
Stacking/多层叠加
Stacking 是多层叠加的意思。也是先生成多个模型,但是用这些模型的预测结果作为下一层模型的输入,有点像多层神经网络的意思。
AdaBoost(Adaptive Boosting/自适应增强)
AdaBoost 是上述 Boosting 思想的一种具体实现算法,一般采用决策树作为弱分类器。那么看一下 AdaBoost 是如何实现迭代生成一系列弱分类器、调整样本权重,以及设置弱分类器权重从而构造出一个强分类器的。
AdaBoost 算法步骤
以离散型AdaBoost(Discrete AdaBoost) 为例:
假设有N个样本 (x1,y1), (x2,y2)…(xN,yN),其中 y1...yN ∈{-1, 1},即二分类问题。
- 设每个样本初始权重相同,都是 1/N。即各样本的权重 w1...wN = 1/N
-
训练分类器时Loss函数采用指数误差
-
开始进行T次迭代(每次生成一个弱分类器ht,t=1...T)
3.2 ht对样本分类的错误率为
3.1 对第t次迭代,使用样本(考虑各样本权重为(w1...wN))训练得到一个弱分类器ht。ht预测的输出也是 {-1, 1}。
3.3 计算该分类器 ht 在最终的强分类器中的权重。这个公式意味着ht的预测准确率越高,在强分类器中的权重越大(下文还有说明)。
3.4 迭代中的强分类器
3.5 更新样本权重,对所有样本计算
3.6 将所有样本的权重重新归一化,即使得所有样本的权重和为1。可知 (t+1)轮所有样本权重和为
3.7 t = t + 1,进行下一轮迭代 -
迭代完成后,得到强分类器
,sign是符号函数,使得输出是 {-1, 1}。
上面的步骤中,我们讨论几个问题:
-
步骤 3.3 中,分类器权重
,该函数图像如下图所示。当错误率 εt 越小,系数 αt 越大,意味着误差小(准确性高)的分类器,在最后的强分类器中有更大的权重。反之,当误差 εt 越大,系数 αt 越小,即在强分类器中的权重较小。另外可以看出当分类器的 错误率 < 0.5 时,αt > 0;如果分类器的 错误率 > 0.5,意味着该分类器预测反了,此时 αt < 0 将该分类器的预测结果反过来使用。
-
步骤 3.5 中,样本权值更新
AdaBoost的优点
AdaBoost 几乎可以“开箱即用”,因为它是自适应的,对参数不会太敏感。
它在一定程度上可以避免“维度灾难”,我理解主要是 AdaBoost 只需要构造弱分类器,比如决策树的话,可以只使用那些比较重要的特征,树的深度很浅,运行速度较快。
同时多个弱分类器的集成还能提升模型的预测能力。
AdaBoost的缺点
比较明显的一点是对噪音和异常数据比较敏感,因为算法中会对分类错误的样本持续提升关注。
AdaBoost公式推导
前面算法中直接给了几个公式,比如分类器的权重 α 和 样本权重更新公式,为什么采用这样的计算公式,我们来推导一下。
假设有N个样本 (x1,y1), (x2,y2)…(xN,yN),其中 y1...yN ∈{-1, 1},即二分类问题。有一系列分类器k 可以线性组合成一个强分类器C,在第 m-1 次迭代,分类器:
这里C是强分类器,k是弱分类器,α 是 k在 C中的权重,下标 1...m-1 是迭代的轮次。注意这里所用的记号与前面算法步骤中的公式的记号有不同,注意各自的含义。
接下来第m轮分类器
因为是采用迭代的方法逐个构造分类器k,所以在第m轮,可以认为 C(m-1) 已经是确定的了,现在需要的是找到一个好的 km 及其系数 αm。
对分类器 Cm 采用指数型误差
令 m=1时
(公式2)
我们希望找到合适的 km 和 αm 使得 E最小。
-
先考虑 km。在公式2中,只有
-
考虑 αm。用公式1对 αm 求导,当导数 = 0 时 E有最小值。
则 -
另外看下更新样本权重。
由于
所以
参考
深入浅出ML之Boosting家族
维基百科 —— Boosting (machine learning)
维基百科 —— AdaBoost