阅读本文需要的背景知识点:集成学习、拉格朗日乘数法、一丢丢编程知识
一、引言
前面一节我们学习了随机森林算法(Random Forest Algorithm),讲到了其中一种集成学习的方法——Bagging 算法,这一节我们来学习另一种集成学习的方法——提升算法1 (Boosting Algorithm),同时介绍其中比较常见的算法——自适应增强算法2(Adaptive Boosting Algorithm / AdaBoost Algorithm)
二、模型介绍
Boosting 算法
Boosting 算法也是一种集成学习,与 Bagging 算法不同的是,每次训练更关注训练出的估计器中分类错误或者回归误差大的样本,即每次训练都是根据上次训练的结果调整不同的样本权重,直到最后的输出小于预设的阈值。
图2-1
图 2-1 展示了提示算法的具体流程,其与 Bagging 算法的区别在于:其一,Bagging 算法的每个估计器相对独立且权重都相同,而 Boosting 算法的每个估计器都依赖于上一个估计器同时权重也不同。其二,一般情况下 Bagging 算法可以减小方差、而 Boosting 算法则是减小偏差。
Boosting 算法中比较有代表性的算法就是自适应增强算法(Adaptive Boosting Algorithm / AdaBoost Algorithm)
AdaBoost 算法
AdaBoost 算法是由 Yoav Freund 和 Robert E. Schapire 在 1995 年提出的,同时还提出了 AdaBoost.M1、AdaBoost.M2 算法用于多分类问题,AdaBoost.R 算法用于回归问题。后面陆续又有人提出了上述算法的变体 AdaBoost-SAMME、AdaBoost-SAMME.R、AdaBoost.R2 算法。
AdaBoost 算法的基本步骤与 Boosting 算法一样,是 Boosting 算法的具体实现,其定义了每次循环如何更新样本权重以及最后如何将每个估计器结合起来。
由于笔者能力所限,本文只会介绍基础的 AdaBoost 算法和现在 scikit-learn 中所实现的 AdaBoost-SAMME、AdaBoost-SAMME.R、AdaBoost.R2算法,其他的算法暂无法一一介绍,感兴趣的读者可以参考文末对应算法的论文原文。
三、算法步骤
下面先给出每个算法的执行步骤,后面再一一说明这些算法步骤中公式的来源。
二分类
假设训练集 T = { X_i, y_i },i = 1,…,N,y_i 可取-1,+1,h(x) 为估计器,估计器的数量为 K。
AdaBoost 算法步骤如下:
初始化样本权重向量 ω_1