原创: 陈超 Refinitiv 创新实验室ARGO
“本文共3400余字,数学公式原理不深,预计阅读时间15分钟”
AdaBoost是Adaptive Boosting的简称,属于集成算法(Ensemble Method)中Boosting类别中的一种。AdaBoost是非常成功的机器学习算法,由Yoav Freund和RobertSchapire于1995年提出,他们因此获得了2003年的哥德尔奖(Gödel Prize)。本文将从下面几个方面对AdaBoost进行展开:
- 算法思想和算法简易流程
- 算法实例和算法总结
- 从广义加法模型看AdaBoost
- sklearn库相关函数
一 算法思想和算法简易流程
在Agro的《XGBOOST(一)》一文中介绍了集成算法以及作为集成算法典型代表的Boosting算法。XGBOOST算法属于Gradient Boosting框架,是Boosting算法家族的一种。作为Boosting算法家族中出现更早也同样闻名的另外一种算法便是本文要论述的AdaBoost算法。Gradient Boost和AdaBoost 最显著的相同点都在于前一轮训练结果将用来调整本轮训练的样本,从而优化本轮训练出的模型,使得整个的模型更加精确。不同点在于Grandient Boost改变的是本轮训练的样本标签,而AdaBoost 则侧重于调整本轮样本的样本权重,从而改变样本的分布。
读者可以通过AdaBoost的算法流程来发现这一不同。算法的简易流程表述如下:
1. 确定样本集
2. 初始化样本数据的权重,如每个样本的权重为1/n(假设样本个数为n)
3. 进行1,2,...,T轮迭代
a. 归一化样本权重
b. 对样本集进行训练,并计算训练误差
c. 选择误差最小的分类器作为本轮的分类器
d. 根据预测结果更新样本数据的权重:预测错误样本增加权重,预测正确样本降低权重
e. 计算分类器的权重
4. 根据分类器的预测结果及其权重加权表决最终结果
下面是一个AdaBoost的训练迭代变化图,我们可以看到在每次迭代中版本的权重的变化,分类错误的样本权重的逐渐加大,而分类正确的样本权重逐渐减少的过程。
(图片来源:https://github.com/purelyvivid/DeepLearningMachineLearning_tutorial)
接下来将通过实例展示AdaBoost的使用,归纳AdaBoost的算法详细流程,从广义加法模型(additive model)这一角度推导这一算法核心算法公式的由来。
二 算法实例和算法总结
假设训练样本如下,我们需要使用该样本对AdaBoost算法模型进行训练,训练轮数为3轮。x是特征值,y是标签(这个实例是AdaBoost的典型代表,在很多资料上都有提及)
第一轮(初始轮)
对训练数据设定为相等的权重。为了保证所有的权重值之和为1,权重一般设置为1/n,这里n=10,所以,权重值为0.1。如图所示,每个训练数据的权重如下,wn 代表的是对应x变量的权重。
i) 训练弱分类器:
因此,我们使用这个数据训练得到第一个弱分类器模型:深度为1的决策树(简单的分段函数),这个模型用数学公式表示为:
ii) 计算弱分类器决策权重
用这个模型对该第一轮训练集的数据分类,得到的结果是[ 1,1,1,-1, -1,-1,-1,-1,-1,-1],能够发现x为6,7,8的数据结果分类错误,计算得到其错误率为:
计算此