集成学习:利用多个学习器来解决机器学习问题。
按集成学习中个体学习器的生成方式来说,集成学习可分为:
- Sequntial methods
- AdaBoost
- Arc-x4
- LPBoost
- ……
- Parallel methods
- Bagging
- Random Subspace
- Random Froests
- ……
本文主要关注AdaBoost。
AdaBoost是一种集成学习算法,主要思想是在数据集上训练多个弱学习器,将多个弱学习器的预测结果进行加权结合输出最终预测结果。
AdaBoost算法特点有:
- 实现简单,效果好
- 发展出了一族算法
- 有很好的理论基础:训练误差指数下降,泛化误差有上限
一、实现简单,效果好
1.1 直观解释
在数据集上训练一系列弱学习器,后一个若学习器更加关注前一个若学习器预测错误的样本,最后将这些学习器加权结合。流程如下图所示:
对于数据集1训练学习器1,然后对数据集1的样本权重调整,使得预测错误的样本的权重更大,形成了数据集2,训练学习器2,再次调整权重,训练学习器3,等等,最后将所有学习器结合。
1.2 原理
AdaBoost的代码只有10行左右,原理也是非常简单。我们先来看一下AdaBoost算法到底是什么。
给定训练集: ( x 1 , y 1 ) , … , ( x m , y m ) ; x i ∈ X , y i ∈ { − 1 , + 1 } \left( x _ { 1 } , y _ { 1 } \right) , \ldots , \left( x _ { m } , y _ { m } \right) ; x _ { i } \in \mathcal { X } , y _ { i } \in \{ - 1 , + 1 \} (x1,y1),…,(xm,ym);xi∈X,yi∈{ −1,+1}
初始化权重: D 1 ( i ) = 1 / m D _ { 1 } ( i ) = 1 / m D1(i)=1/m
循环开始:训练轮数t = 1 , … , T :
h t = arg min h j ∈ H ϵ j = ∑ i = 1 m D t ( i ) [ y i ≠ h j ( x i ) ] h _ { t } = \arg \min _ { h _ { j } \in \mathcal { H } } \epsilon _ { j } = \sum _ { i = 1 } ^ { m } D _ { t } ( i ) \left[ y _ { i } \neq h _ { j } \left( x _ { i } \right) \right ] ht=arghj∈