决策树算法之 AdaBoost
AdaBoost 是一种更高级的「森林」类型的决策树,和随机森林比起来,它有以下三个特点
- AdaBoost 的每棵树都只有一个根节点和两个叶子节点,实际上叫树桩(stump)可能会更合适
- AdaBoost 的每个树桩的权重是不同的,而随机森林中的每棵树的权重是相同的
- 前一个树桩的错误数据会影响后一个树桩的生成,意味着后面的树桩是前面树桩的补足。这种思想也被称为 Boost,除 AdaBoost 外,GBDT 和 XGBoost 也是这样的思想(很明显它们中都有 Boost)。
AdaBoost 的生成步骤
假设我们有以下训练数据,我们想通过「胸口疼痛」、「血管堵塞」和「体重」这三个特征来训练一个心脏病预测模型:
胸口疼痛 | 血管堵塞 | 体重 | 患心脏病 |
---|---|---|---|
Yes | Yes | 205 | Yes |
No | Yes | 180 | Yes |
Yes | No | 210 | Yes |
Yes | Yes | 167 | Yes |
No | Yes | 156 | No |
No | Yes | 125 | No |
Yes | No | 168 | No |
Yes | Yes | 172 | No |
首先,我们需要为每个样本附上一个相同的权重,因为只有 8 条数据,所以每个样本的权重均为 1/8,如下
胸口疼痛 | 血管堵塞 | 体重 | 患心脏病 | 样本权重 |
---|---|---|---|---|
Yes | Yes | 205 | Yes | 1/8 |
No | Yes | 180 | Yes | 1/8 |
Yes | No | 210 | Yes | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
No | Yes | 156 | No | 1/8 |
No | Yes | 125 | No | 1/8 |
Yes | No | 168 | No | 1/8 |
Yes | Yes | 172 | No | 1/8 |
接下来,我们利用基尼不纯度在这 3 个特征中找一个最合适的作为树根,经过计算,当「体重 >176」 时,基尼不纯度最小,则第一个树桩的节点为「体重 >176」,如下图所示:
产生出一个树桩后,我们把该树桩判断错误的样本拿出来,将它们的权重相加,便得出该树桩的总误差,上述树桩只有一个错误样本:
胸口疼痛 | 血管堵塞 | 体重 | 患心脏病 | 样本权重 |
---|---|---|---|---|
Yes | Yes | 167 | Yes | 1/8 |
则该树桩的总误差(Total Error)即这条错误样本的权重——0.125。通过总误差,我们便可以计算出该树桩的 Weight:
Weightstump=12log(1−TotalErrorTotalError)Weight_{stump} = \frac{1}{2}\log(\frac{1-TotalError}{TotalError}) Weightstump=21log(TotalError1−TotalError)
该公式的曲线如下图所示,可以看到,误差的取值范围在 0 到 1 之间,随着误差越大,树桩的 Weight 越小,上例中,我们的误差为 0.125,所对应的 Weight 为 0.973,也就是图中蓝色点所处的位置:
一棵树桩产生出来后,接着就要产生第二棵,前面说了,后一棵树的生成依赖于前一棵树的误差,具体的,我们会根据这个误差来调整每个样本的权重,这样,后面的树就可以根据样本的新权重来训练了,更进一步,前一棵树中错误的样本,我们希望在下一棵树的训练中,提高这些样本的权重,同时降低正确样本的权重,这样下一棵树便会更倾向于把这类样本处理好,起到了对前面树的补足作用。
整体误差和树的 Weight 成负相关关系,Weight 越高代表置信度越高,这时错误的样本相对于 Weight 低的树来说,样本权重要调的更高,而正确的样本的权重要调的更低,错误样本权重和正确样本权重的调整分别如下面左图和右图所示:
对于本例来说,第一个树桩的 Weight 为 0.973,则错误样本的权重根据左图公式,将调整为 0.125×2.646=0.330.125 \times 2.646 = 0.330.125×2.646=0.33,同理,正确样本的权重根据右图公式,将调整为 0.125×0.378=0.050.125 \times 0.378=0.050.125×0.378=0.05,归一化后,最终所有样本的权重调整如下:
序号 | 旧样本权重 | 新样本权重 | 归一化后 |
---|---|---|---|
1 | 1/8 | 0.05 | 0.07 |
2 | 1/8 | 0.05 | 0.07 |
3 | 1/8 | 0.05 | 0.07 |
4 | 1/8 | 0.33 | 0.49 |
5 | 1/8 | 0.05 | 0.07 |
6 | 1/8 | 0.05 | 0.07 |
7 | 1/8 | 0.05 | 0.07 |
8 | 1/8 | 0.05 | 0.07 |
接下来,我们需要根据新的特征权重来训练树桩,其中的一种办法是根据权重来抽样,即在每抽一条数据之前,产生一个 0-1 的随机数,根据随机数来决定抽哪条数据。以上面的数据举例,当随机数落在 [0, 0.07) 范围内时,则抽出第 1 条样本,落在 [0.07, 0.14) 范围内时,则抽出第 2 条样本,以此类推。
抽样完成后,我们重新对这些样本赋予等值的权重,如下:
胸口疼痛 | 血管堵塞 | 体重 | 患心脏病 | 样本权重 |
---|---|---|---|---|
No | Yes | 156 | No | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
No | Yes | 125 | No | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
Yes | Yes | 172 | No | 1/8 |
Yes | Yes | 205 | Yes | 1/8 |
Yes | Yes | 167 | Yes | 1/8 |
可见第 4 条样本被重复抽出来了多次(它的样本权重最高),使用这批数据训练后,新的树桩会更倾向于把这条样本分类正确,因为在训练时,重复的样本会受到更大的惩罚。
接下来的步骤和最开始的一样,重复上面的过程就可以了。
AdaBoost 的预测
在构建完 AdaBoost 后,我们该如何做预测呢?预测过程和随机森林类似,都是用每棵树的结果来投票,差别在于这里采用的是加权投票。例如我们有条数据,每棵树对该数据的预测结果如下:
树序号 | 树 Weight | 预测结果 |
---|---|---|
1 | 0.97 | 1 |
2 | 0.34 | 0 |
… | … | … |
100 | 0.46 | 1 |
聚合后,把相同预测结果的 Weight 相加,如下
预测结果 | 树 Weight 之和 |
---|---|
1 | 43.7 |
0 | 20.1 |
取 Weight 较大者,所以该条数据的预测结果为 1.
总结
本文我们一起学习了 AdaBoost 的构建过程,AdaBoost 和随机森林比起来,有 3 个特点:
- 每棵树只有一个根节点和两个叶子节点
- 后一棵树由前一棵树的误差决定
- 每棵树都有不同的权重,预测时会根据权重来聚合预测结果
参考:AdaBoost, Clearly Explained
相关文章:
- 决策树之随机森林
关注博主:
决策树算法之 AdaBoost相关推荐
- 最常用的决策树算法!Random Forest、Adaboost、GBDT 算法
点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习 ...
- 最常用的决策树算法(二)Random Forest、Adaboost、GBDT 算法
决策树是一个非常常见并且优秀的机器学习算法,它易于理解.可解释性强,其可作为分类算法,也可用于回归模型.本文将分三篇介绍决策树,第一篇介绍基本树(包括 ID3.C4.5.CART),第二篇介绍 Ran ...
- 决策树算法大家庭:Random Forest、Adaboost、GBDT 算法总结
本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习器的预测结果来改善单个基学习器的识别率和泛化性. 集成学习 常见的集成学习框架有三种:Bagging,Boosti ...
- 决策树算法介绍及应用
机器学习概念 机器学习 (Machine Learning) 是近 20 多年兴起的一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科. 机器学习理论主要是设计和分析一些 ...
- 一文详解决策树算法模型
AI有道 一个有情怀的公众号 上文我们主要介绍了Adaptive Boosting.AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不 ...
- 最常用的决策树算法(一):ID3、C4.5、CART
决策树是一个非常常见并且优秀的机器学习算法,它易于理解.可解释性强,其可作为分类算法,也可用于回归模型.本文将分三篇介绍决策树,第一篇介绍基本树(包括 ID3.C4.5.CART),第二篇介绍 Ran ...
- python实现决策树算法sklearn_GitHub - cbyonder/lihang_algorithms: 用python和sklearn两种方法实现李航《统计学习方法》中的算法...
lihang_algorithms 用python和sklearn实现李航老师的<统计学习方法>中所提到的算法 实验数据:MNIST数据集,这里用kaggle中处理好的数据 官方下载地址: ...
- 机器学习-有监督学习-分类算法:决策树算法【CART树:分类树(基于信息熵;分类依据:信息增益、信息增益率、基尼系数)、回归树(基于均方误差)】【损失函数:叶节点信息熵和】【对特征具有很好的分析能力】
一.决策树概述 注:生产实践中,不使用决策树,太简单,而是使用决策树的升级版:集成学习算法. 集成学习算法有: Random Forest(随机森林) Extremely Randomized For ...
- 【机器学习入门】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集
各位同学好,今天和大家分享一下python机器学习中的决策树算法,在上一节中我介绍了决策树算法的基本原理,这一节,我将通过实例应用带大家进一步认识这个算法.文末有完整代码和数据集,需要的自取.那我们开 ...
最新文章
- nginx安装第三方模块echo
- nginx php-fpm 运行原理
- LetCode 15 三数之和
- C# Newtonsoft.Json JsonSerializerSettings 全局序列化设置
- Android Studio生成aar包的方法以及解压aar包的方法
- window 右击菜单启动 nodejs app
- PAT甲级题目对应知识点分类梳理
- HP的.NET职位面试题
- html 伪元素作用,:before,:after伪元素妙用
- 《游戏设计师修炼之道:数据驱动的游戏设计》一1.4 来自政府和产业的挑战...
- window10下CUDA9安装和vs2015配置
- 网传互联网公司大裁员
- 华为ensp的路由器怎么和本地电脑通信
- UE4碰撞射线检测2
- 蓝桥杯 结果填空 猜生日
- javascript 中的window, document, screen都有什么区别?
- 虚拟机账号密码忘记了怎么办_有问必答丨开机密码忘了怎么办?
- 这9款宝藏办公软件原地封神,款款深入人心
- Linux之systemctl命令基本使用
- date java 格式化 sss_Java的日期格式化常用方法