集成学习:利用多个学习器来解决机器学习问题。
按集成学习中个体学习器的生成方式来说,集成学习可分为:
- 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算法到底是什么。
给定训练集:
(x1,y1),…,(xm,ym);xi∈X,yi∈{−1,+1}
初始化权重:
D1(i)=1/m
循环开始:训练轮数t = 1 , … , T :
ht=arghj∈Hminϵj=i=1∑mDt(i)[yi̸=hj(xi)]
If ϵt≥1/2 then stop
Setαt=21log(ϵt1−ϵt)
Dt+1(x)=ZtDt(x)×{exp(−αt),exp(αt), if ht(x)=f(x) if ht(x)̸=f(x)
Update =ZtDt(i)exp(−αtyiht(xi)) where Zt is normalisation factor
循环结束
最终的分类器:
H(x)=sign(t=1∑Tαtht(x))
t代表训练轮数,
ht表示找到能够使训练误差
ϵj最小的
hj(学习器),如果
ϵj大于
1/2表示该
hj在训练集上都不如随机猜来的好(例如:二元分类问题,随机猜测,错误率在0.5左右,如果大于0.5则表示不如随机猜测的好),则丢弃该
hj,继续寻找好的
hj。
步骤3(Set开头的行)计算权重,步骤4(Set的下一行)更新样本权重,将预测错误的样本的权重设置的更大,怎么做到的呢?注意到
αt>0,步骤4的分子包含指数函数,预测错误时:
exp(αt)>1>exp(−αt),这样就对预测错误的样本设置了更大的权重,在下一次迭代时,根据步骤1,权重更大的样本对
ϵj的影响更大,也就是受到了更多的关注。
最后一步是将学习得到的学习器加权结合,即将弱学习器结合成强学习器。
二、AdaBoost理论发展简介
1989年:提出了“weakly learnable ?= strong learnable”,(弱学习器 ?= 强学习器) 问题,即弱学习器是否能够变成强学习器。
弱学习器:性能较弱,比如:二元分类问题,预测准确率只比随机猜测好一点
强学习器:性能强,分类精度很高
1990年:Schapire 构造性证明了 弱学习器==强学习器,提出了第一个Boosting 算法。
1997年:Freund & Schapire给出了AdaBoost算法实现
……
2013 年:周志华教授给出了Margin distribution更好的界,给出average Margin和 Margin Variance对预测结果的影响,AdaBoost最大化的是Margin distribution,该方法具有了坚实的理论基础。
可见,AdaBoost从一开始就是为了解决理论问题提出的,所以该方法在后来的发展中都有具体的理论背景。
三、AdaBoost算法的迷之问题
在对AdaBoost算法的研究过程中,人们发现AdaBoost算法没有随着训练轮数的增加而出现过拟合现象,违背的奥卡姆剃刀原则。
奥卡姆剃刀原则:如果对于同一现象有两种或多种不同的假说,我们应该采取比较简单那一种。
对于上图,训练8轮左右,训练集损失已经为0了,轮数增加测试集损失继续下降,这就违反了奥卡姆剃刀原则:训练8轮的模型已经在训练集上最优了,而且模型复杂度肯定比不上训练1000轮的,1000轮的模型在训练集上仍然损失为0,但是其测试集误差却更低。也就是说对于训练集选择简单的假说,即训练8轮的模型,根据奥卡姆剃刀原则,该模型应该是最好的,现实却是很复杂的模型比简单的好。
为了解释AdaBoost不会过拟合的原因,学术界出现了两个派别,一种是从统计学的观点来解释,一种是从计算机科学的角度来解释,从计算机角度来的解释比较直观,提出了间隔理论,即随着训练轮数的增加,即使训练误差为0,继续训练可以提高间隔,间隔增加,则预测性能就会提高。了解SVM算法的话应该比较熟悉间隔,间隔就是样本离划分超平面的距离。
参考
Boosting 25年
The AdaBoost Algorithm
机器学习 周志华