AdaBoost(Adaptive Boosting )
转自:http://www.cnblogs.com/pinard/p/6133937.html
1. 回顾boosting算法的基本原理
有几个具体的问题Boosting算法没有详细说明:
- 如何计算学习误差率e?
- 如何得到弱学习器权重系数α?
- 如何更新样本权重D?
- 使用何种结合策略?
只要是boosting大家族的算法,都要解决这4个问题。那么Adaboost是怎么解决的呢?
2. Adaboost算法的基本思路
我们这里讲解Adaboost是如何解决上一节这4个问题的。
假设我们的训练集样本是
Adaboost的分类问题
(1)学习误差率e
由于多元分类是二元分类的推广,这里假设我们是二元分类问题,输出为{-1,1},则第k个弱分类器
Gk(x)
G
k
(
x
)
在训练集上的加权误差率为
(2)弱学习器权重系数α
接着我们看弱学习器权重系数
α
α
,对于二元分类问题,第k个弱分类器
Gk(x)
G
k
(
x
)
的权重系数为
(3)更新样本权重D
假设第k个弱分类器的样本集权重系数为
D(k)=(wk1,wk2,...wkm)
D
(
k
)
=
(
w
k
1
,
w
k
2
,
.
.
.
w
k
m
)
,则对应的第k+1个弱分类器的样本集权重系数
wk+1
w
k
+
1
为
(4)结合策略
Adaboost分类采用的是加权平均法,最终的强分类器为
f(x)
f
(
x
)
Adaboost的回归问题
由于Adaboost的回归问题有很多变种,这里我们以Adaboost R2算法为准。
(1)学习误差率e
对于第k个弱学习器,计算他在训练集上的最大误差
最终得到第k个弱学习器的误差率
(2)弱学习器权重系数α
(3)更新样本权重D
对于更新更新样本权重D,第k+1个弱学习器的样本集权重系数为
(4)结合策略
和分类问题一样,采用的也是加权平均法,最终的强回归器为
3. AdaBoost分类问题的损失函数优化
刚才上一节我们讲到了分类Adaboost的弱学习器权重系数公式和样本权重更新公式。但是没有解释选择这个公式的原因,让人觉得是魔法公式一样。其实它可以从Adaboost的损失函数推导出来。
从另一个角度讲,Adaboost是模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题。
(1)加法模型
模型为加法模型好理解,我们的最终的强分类器是若干个弱分类器加权平均而得到的。
(2)前向分步学习算法
前向分步学习算法也好理解,我们的算法是通过一轮轮的弱学习器学习,利用前一个弱学习器的结果来更新后一个弱学习器的训练集权重。也就是说,第k-1轮的强学习器为
(3)损失函数为指数函数
Adaboost损失函数为指数函数,即定义损失函数为
利用前向分步学习算法的关系可以得到损失函数为
将这个式子代入损失函数,损失函数转化为
首先,我们求( Gk(x) G k ( x ) 为弱学习器),可以得到
将 Gk(x) G k ( x ) 代入损失函数,并对α求导,使其等于0,则就得到了
4. AdaBoost二元分类问题算法流程
这里我们对AdaBoost 二元分类 问题算法流程做一个总结。
输入为样本集
T={(x,y1),(x2,y2),...(xm,ym)}
T
=
{
(
x
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
(
x
m
,
y
m
)
}
,输出为{-1, +1},弱分类器算法, 弱分类器迭代次数K。输出为最终的强分类器
f(x)
f
(
x
)
。
(1)初始化样本集权重为:
(2)对于k=1,2,…K:
a)使用具有权重 Dk D k 的样本集来训练数据,得到弱分类器 Gk(x) G k ( x )
b)计算 Gk(x) G k ( x ) 的分类误差率
(3)构建最终分类器为:
注:对于Adaboost多元分类算法,其实原理和二元分类类似,最主要区别在弱分类器的系数上。比如Adaboost SAMME算法,它的弱分类器的系数为:
5. Adaboost回归问题的算法流程
这里我们对AdaBoost 回归问题 算法流程做一个总结。
AdaBoost回归算法变种很多,下面的算法为Adaboost R2回归算法过程。
输入为样本集
T={(x,y1),(x2,y2),...(xm,ym)}
T
=
{
(
x
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
(
x
m
,
y
m
)
}
,弱分类器算法, 弱分类器迭代次数K。输出为最终的强分类器
f(x)
f
(
x
)
。
(1)初始化样本集权重为:
(2)对于k=1,2,…K:
a)使用具有权重 Dk D k 的样本集来训练数据,得到弱分类器 Gk(x) G k ( x )
b)计算训练集上的最大误差
c)计算每个样本的相对误差
- 如果是线性误差,则 eki=|yi−Gk(xi)|Ek e k i = | y i − G k ( x i ) | E k
- 如果是平方误差,则 eki=(yi−Gk(xi))2E2k e k i = ( y i − G k ( x i ) ) 2 E k 2
- 如果是指数误差,则 eki=1−exp(−yi+Gk(xi))Ek e k i = 1 − e x p ( − y i + G k ( x i ) ) E k
d)计算回归误差率
(3)构建最终强学习器为:
对比Adaboost 分类问题 和 回归问题 的算法流程,可以发现,二者的不同主要体现在回归问题的算法比分类问题的算法多了(2)b)和c)两个步骤,而且在分类/回归误差率、弱学习器的系数、样本集的权重、规范化因子 Zk Z k 、最终的强学习器上各有不同,因此造成了两种算法的差异。
6. Adaboost算法的正则化
为了防止Adaboost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。定义为
ν
ν
,对于前面的弱学习器的迭代
7. Adaboost小结
到这里Adaboost就写完了,前面有一个没有提到,就是弱学习器的类型。理论上任何学习器都可以用于Adaboost. 但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。
这里对Adaboost算法的优缺点做一个总结。
Adaboost的主要优点有:
- Adaboost作为分类器时,分类精度很高。
- 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
- 作为简单的二元分类器时,构造简单,结果可理解。
- 不容易发生过拟合。
Adaboost的主要缺点有:
- 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。