![1ba44b69b9321d231e0bffbb935fb3c7.png](https://i-blog.csdnimg.cn/blog_migrate/456982910c8012c8166d7aa5ce9ecc2b.jpeg)
上一篇文章给大家介绍了Bagging算法族和随机森林算法,需要的朋友可以自行跳转阅读:
周明:集成学习(Ensemble Learning)(1)zhuanlan.zhihu.com![17507c2182022d68716483bfc22c98c3.png](https://i-blog.csdnimg.cn/blog_migrate/6daac37f24f7189095a957288a041e51.jpeg)
本文给大家介绍集成学习的另一分支Boosting算法族,及其代表算法AdaBoost~
2、Boosting(提升)算法族介绍
与Bagging相比,Boosting属于「序列化算法」,通过迭代训练的方式降低上一个基学习器(弱学习器)的偏差(通过更加关注上一个基学习器预测错误的样本,并忽略正确预测的样本实现),然后将训练好的弱学习器通过加法模型线性组合为强学习器。
![f674a062ef8e1eb2a1aed474e4a989bd.png](https://i-blog.csdnimg.cn/blog_migrate/2038812197639b05f518f2627e96e75e.png)
Boosting算法族的两个核心问题:
- 迭代训练过程中如何降低模型的偏差?
- 如何将训练好的弱学习器组合为强学习器?
下面我们将通过解决这两个核心问题,分别了解下AdaBoost、提升树(Boosting Tree)、梯度提升树(GBDT)和XGBoost。
2.1 AdaBoost(Adaptive Boosting,自适应boosting)
AdaBoost算法是Boosting算法的典型代表,它是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二分类算法。
它对两个核心问题的回答是:
- 迭代训练过程中如何降低模型的偏差?
答: AdaBoost算法通过更新附加给训练集的每个样本的权重来降低模型的偏差。具体描述为:每一轮训练弱学习器时,通过增加上一轮预测错误样本的权重,并降低上一轮预测正确样本的权重来让模型更关注预测错误的样本,从而最小化整体模型的拟合偏差。
- 如何将训练好的弱学习器组合为强学习器?
AdaBoost通过加权多数表决的方法实现聚合多个弱学习器为强学习器。具体描述为:通过给预测误差小的学习器更大的权重,和给预测误差大的学习器更小的权重,来让预测错误率更小的学习器对整体预测结果贡献更大,从而降低整体模型的偏差。
对于二分类问题,AdaBoost算法流程描述如下:
![06236e830503ed0838490fad66ad433b.png](https://i-blog.csdnimg.cn/blog_migrate/5e9fa92b21420a91b1b0fc2cb36f732c.jpeg)
数据集中有m个观测数据,我们想在给定一组弱模型的情况下使用AdbBoost算法。在算法的起始阶段(序列中的第一个模型),所有的观测数据都拥有相同的权重1/m。然后,我们将下面的步骤重复 T 次(作用于序列中的 T 个学习器):
(1)用当前观测数据的权重
(2)计算本轮迭代的预测错误率
(3)计算本轮基学习器的权重系数
(4)更新观测数据的权重为
1.)当
2.)当
重复执行(1)-(4),我们顺序地构建出T个模型,然后将T个模型加权求和得到强学习器 :
2.1.1 举例解释AdaBoost
例题:给定如表2-1所示的训练数据。假设弱分类器由x<v或x>v产生,其分类阈值v使该分类器在训练数据集上分类误差率最低。请用AdbBoost学习一个强分类器。
![a8a2f90787370c66ee885c5b95fe2f3e.png](https://i-blog.csdnimg.cn/blog_migrate/824e27b6d63a9de24c9bc4347df62944.png)
下面开始推演训练过程:
(1)初始化算法参数(初始化数据权值分布):
![ed3261766c91d539e29cee7e677b5f15.png](https://i-blog.csdnimg.cn/blog_migrate/8c75f43fe573d6326b4dcbc9bfdad1ef.png)
(2)对于迭代次数t=1时:
1.)在权值分布为
![19496744b0e88292224691fcff55e841.png](https://i-blog.csdnimg.cn/blog_migrate/0189e62fb90aae4ae203ae4ea7743836.png)
分类误差率为:
注:此处需判断
2.)根据分类误差率
注:权重系数
3.)更新训练数据的权值分布:
对于错误分类的样本(序号为7,8,9的样本)权值更新为
对于正确分类的样本(排除序号为7,8,9的其他样本)权值更新为
![8be548024f5d1dcbac03eb263501696a.png](https://i-blog.csdnimg.cn/blog_migrate/2d20cad2b0eae00befb793ff4ef72063.png)
注:序号为7,8,9的样本因为在第一轮训练中被错误分类,所以权值从0.1提升为0.16667;反之其他被正确分类的样本权值从0.1降低为0.07143。
第一轮训练成果:分类函数
思考:由上面分析可知,错误分类样本的权值之和为本轮误差率,由可计算得到该基分类器的权重系数,进而可以根据和错误分类情况计算出下一轮训练的权值分布,达到迭代降低错误分类的效果。
(3)对于迭代次数t=2时:
1.)在权值分布为
![ceb4ffa8cfceb6a04a0f0d2eda3e4e88.png](https://i-blog.csdnimg.cn/blog_migrate/dab81bbe2d2638f9613ffc0b516d6727.png)
分类误差率为:
同样,此时
2.)根据分类误差率
注:因为
3.)更新训练数据的权值分布:
对于错误分类的样本(序号为4,5,6的样本)权值更新为
对于正确分类的样本(排除序号为4,5,6的其他样本)权值更新为
![ffb65a3db21fc55789a7db455012ee28.png](https://i-blog.csdnimg.cn/blog_migrate/145ae87f63d687f7f7b47b4ce5c6fd09.png)
![5238ce896aebd6311f6b93e130fb22fb.png](https://i-blog.csdnimg.cn/blog_migrate/db3008643df2f6db9647940767256991.jpeg)
注:序号为4,5,6的样本因为在第二轮训练中被错误分类,所以权值从0.07143提升为0.1667;反之其他被正确分类的样本权值被降低。
第二轮训练成果:分类函数
(4)对于迭代次数t=3时:
1.)在权值分布为
故基本分类器为:
![a9a08e097d6f8b767c3741c75c6699ea.png](https://i-blog.csdnimg.cn/blog_migrate/92cb767ed4fb93245271c7974c797e16.png)
分类误差率为:
同样,此时
2.)根据分类误差率
注:此处虽然分类错误样本数为4个,但是样本序号为1,2,3,10的样本在之前训练中已被正确分类,故样本权值会比较低。计算得到
3.)更新训练数据的权值分布:
对于错误分类的样本(序号为1,2,3,10的样本)权值更新为
对于正确分类的样本(排除序号为1,2,3,10的其他样本)权值更新为
![ef3964fe3c2a5147513bdd32fa6e6e0c.png](https://i-blog.csdnimg.cn/blog_migrate/f5ea956ee455b3c480038439bf6b63ab.png)
![64972351a87639f3827d81680e171553.png](https://i-blog.csdnimg.cn/blog_migrate/bf55aee684b25c79e7d58289b128a923.jpeg)
第三轮训练成果:分类函数
2.1.2 代码实现AdaBoost(使用sklearn实现)
![2845e2733eb2e4284cc51fca873f1eb9.png](https://i-blog.csdnimg.cn/blog_migrate/87179dd4ab862e4a2e11d4ca398cfe49.jpeg)
感谢阅读,如果你感觉本文能帮到你,欢迎点赞、评论和收藏本文,鄙人会再接再厉,为您带来更多机器学习相关的知识分享~
下一篇将给大家介绍提升树(Boosting Tree),希望继续关注。