一起学西瓜书08集成学习 (二)Boosting
1.Boosting的思路
集成多个模型,每个模型都在尝试增强整体效果。
具体来说:
就是先从初始训练集训练出一个基学习器,
再根据基学习器的表现对训练样本分布进行调整,使得先前学习器做的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个学习器
如此重读进行,直至学习器数目达到预先指定的值.
从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
2.AdaBoost
标准AdaBoost只适用于二分类任务
上面是AdaBoost的图示
根据上面这张图来看,经过第一个学习器的学习后给预测错误样本呈现为更深的蓝色的点,训练正确的为浅色的蓝色的点,赋予错误的训练样本以更高的权重,对于经过调整的训练样本再次训练一个学习器,同理一直迭代下去。
也就是第一个学习器选择最优的策略
后面的学习器针对上次学习器的学习结果调整权重来训练那些预测错误的样本点
下图是书中给出的AdaBoost算法流程图
推导
书上给出的推导比较难看懂,这里可以先跳过,之后会举例来介绍
举例
下面内容部分来自这篇文章: ->手把手教你AdaBoost
AdaBoost通过每次降低个体学习器的分类误差,加大效果好的个体学习器的重要性,得到最终的集成学习器。
下面通过 李航的《统计学习方法》中的例子来理解
第一个个体学习器
对于第一个个体学习器,我们要选择训练下来误差最小的那个
我们首先认为的权重是一样的,即每一个数据同等重要。(权重是用来计算误差的)
我们可以任意选取阈值,基于这种策略来计算不同阈值下的准确率,最终得出了当阈值取在2.5的时候误差率最低
然后根据下图对每一个权重进行更新,最后归一化
我觉得这个图好理解一点
从计算公式可以看出,如果第个样本分类错误,则,导致样本的权重在第k+1个弱分类器中增大,如果分类正确,则权重在第k+1个弱分类器中减少.
我来写一下这个D2是怎么得出来的
这就是第一个分类器的公式,它调整了每个数的权重,并且计算出这个分类器的权重
第二个个体学习器
第三个个体学习器
对比三个个体学习器我们可以发现,权值很低的数据从侧面说明,它们在前面的学习器经常被分类正确,也就是说它们被分类正确的票数就比较多(a相当于每个分类器的票数),那么之后的个体学习器把它们分类错也没所谓啦,反正总票数是分类正确的票数多就可以了。例如x=1,前面两次分类对了,获得正确票数0.4236+0.6496=1.0732,第三次错了,获得错误票数0.7514,正确票数多,最终还是分类正确了。为了想办法让分类错误的数据变为分类正确的,后面的个体学习器也在努力。如x=6,第一次分类错误的票数为0.4236,第二次分类正确的票数0.6496,可以看到为了让前面分类错误的数据变为分类正确的,后面个体学习器的重要性(a)需要比前面的大。