集成学习(ensemble learning)的思路是“三个臭皮匠顶个诸葛亮”。通过多个“弱学习器”投票产生结果,即形成一个“强学习器”,这样的结果最终往往可能有更强的泛化能力。
本文要介绍的Adaboost算法(Adaptive Boosting 自适应增强),就是一个集成学习算法。名字还是比较形象,其自适应在于:前一个基本分类器分错的样本会在当前学习器中得到加强(权重增加),加权后的全体样本被用来训练当前的基本分类器。与此同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
算法步骤
Step 1: 初始化数据权重,在第一个弱分类器中,每个观测的权重都为
,标签为{-1,1},按照错误率最小的方式分类。
Step 2: 迭代更新,假设我们迭代了m次,得到m个弱分类器
当我们正处于第j次迭代时:
a: 计算第j个分类器的错误率。
其中,
表示第
次迭代时
的分类;
表示第
次迭代时
的系数
b: 计算 在最终分类器中所占的权重,用 来表示。
可以看出,错误率 越低的分类器,其在最终分类器中所占的权重越高。
c: 更新训练数据集的权重
其中,
可以发现,在第j+1次更新权重的时候,第j次分类正确的观测(即 )其权重将减小;第j次分类错误的观测(即 )其权重将加大,从而在第j+1次分类时,有着更加重要的地位。
Step 3: 组合各个弱分类器,从而得到我们最终的分类器。
计算实例
我们以单变量5个观测为例
序号 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
x | 1 | 2 | 3 | 4 | 5 |
y | -1 | 1 | 1 | 1 | -1 |
第一次迭代:
第一次迭代中,各个样本权重为{0.2, 0.2, 0.2, 0.2, 0.2},因为权重相同,所以最小错误率方法就等同于最小错误样本数法。
可以发现当我们以1.5为界分类时,错误样本数为1;以2.5为界分类时,其错误样本数为2;以3.5为界分类时,其错误样本数为2;以4.5为界分类时,其错误样本数为2。
所以我们以1.5为界,小于1.5的分类-1,大于1.5的分类为1。
第一次迭代 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
x | 1 | 2 | 3 | 4 | 5 |
y | -1 | 1 | -1 | 1 | 1 |
本次预测 | -1 | 1 | 1 | 1 | 1 |
本次权重 | 0.2 | 0.2 | 0.2 | 0.2 | 0.2 |
其错误率
在最终分类器中所占权重
权重更新:
,{0.1250, 0.1250, 0.5000, 0.1250, 0.1250}
第二次迭代:
可以发现:
当我们以1.5为界时(小于1.5为-1),错误率
;
当我们以2.5为界时(小于2.5为1),错误率
;
当我们以3.5为界时(小于3.5为1),错误率
;
当我们以4.5为界时(小于4.5为1),错误率
所以,我们以3.5为界
其错误率
在最终分类器中所占权重
第二次迭代 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
x | 1 | 2 | 3 | 4 | 5 |
y | -1 | 1 | -1 | 1 | 1 |
本次预测 | -1 | -1 | -1 | 1 | 1 |
本次权重 | 0.1250 | 0.1250 | 0.5000 | 0.1250 | 0.1250 |
G(x) | -1 | -1 | -1 | 1 | 1 |
此时,分类器
上有1个误判点为2
权重更新:
,{0.0714, 0.5000, 0.2857, 0.0714, 0.0714}
第三次迭代:
可以发现:
当我们以1.5为界时(小于1.5为-1),错误率
;
当我们以2.5为界时(小于2.5为1),错误率
;
当我们以3.5为界时(小于3.5为1),错误率
;
当我们以4.5为界时(小于4.5为1),错误率
所以,我们以2.5为界
其错误率
在最终分类器中所占权重
第三次迭代 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
x | 1 | 2 | 3 | 4 | 5 |
y | -1 | 1 | -1 | 1 | 1 |
本次预测 | 1 | 1 | -1 | -1 | -1 |
本次权重 | 0.0714 | 0.5000 | 0.2857 | 0.0714 | 0.0714 |
G(x) | -1 | 1 | -1 | 1 | 1 |
此时,分类器 上没有任何误判点
最终:
至此,迭代过程结束。可以发现,如果某些个样本被分错,它们在下一轮迭代中的权值将被增大,同时,其它被分对的样本在下一轮迭代中的权值将被减小。在下一轮迭代中,总是选取让误差率最低的阈值来设计基本分类器。
其他
集成学习中还有一个比较常用的bagging算法。在介绍了bagging算法中,我们比较了一下两个算法之间的区别。