AdaBoost是Boosting这类算法中的著名代表,它有多种推导方式,比较容易理解的就是基学习器的线性组合来最小化指数损失函数。
【AdaBoost算法过程】
输入:训练数据集
T={(x1,y1),(x2,y2),...,(xN,yN)}
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
,其中
xi∈X⊆Rn
x
i
∈
X
⊆
R
n
,标记
yi∈Y={−1,+1}
y
i
∈
Y
=
{
−
1
,
+
1
}
输出:最终分类器
G(x)
G
(
x
)
(1)初始化原始训练数据集的权值分布
D1
D
1
;
D1=(w11,w12,...,w1N)
D
1
=
(
w
11
,
w
12
,
.
.
.
,
w
1
N
)
,
w1i=1N
w
1
i
=
1
N
假设原始训练数据集具有均匀的权值分布
假
设
原
始
训
练
数
据
集
具
有
均
匀
的
权
值
分
布
(2)对 m=1,2,...,M m = 1 , 2 , . . . , M
①使用具有权值分布 Dm D m 的训练数据集学习,得到基分类器 Gm(x):X→{−1,+1} G m ( x ) : X → { − 1 , + 1 }
②计算
Gm(x)
G
m
(
x
)
在训练数据集上的分类误差率
em
e
m
em=∑i=1NP(Gm(xi)≠yi)=∑Gm(xi)≠yiwmi∑i=1Nwmi=∑i=1NwmiI(Gm(xi)≠yi)
e
m
=
∑
i
=
1
N
P
(
G
m
(
x
i
)
≠
y
i
)
=
∑
G
m
(
x
i
)
≠
y
i
w
m
i
∑
i
=
1
N
w
m
i
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
)
wmi表示第m轮中第i个实例的权值,我们定义分类误差率em为被Gm(x)
w
m
i
表
示
第
m
轮
中
第
i
个
实
例
的
权
值
,
我
们
定
义
分
类
误
差
率
e
m
为
被
G
m
(
x
)
误分类的样本对应的权值之和除以所有样本权值之和,由于所有样本权值
误
分
类
的
样
本
对
应
的
权
值
之
和
除
以
所
有
样
本
权
值
之
和
,
由
于
所
有
样
本
权
值
之和为1,即∑i=1Nwmi=1,所以em即为∑Gm(xi)≠yiwmi
之
和
为
1
,
即
∑
i
=
1
N
w
m
i
=
1
,
所
以
e
m
即
为
∑
G
m
(
x
i
)
≠
y
i
w
m
i
③计算
Gm(x)
G
m
(
x
)
的系数
αm
α
m
αm=12ln1−emem
α
m
=
1
2
l
n
1
−
e
m
e
m
系数αm表示着对应的基分类器Gm(x)在最终分类器中的重要性,当em≤12时,
系
数
α
m
表
示
着
对
应
的
基
分
类
器
G
m
(
x
)
在
最
终
分
类
器
中
的
重
要
性
,
当
e
m
≤
1
2
时
,
αm≥0,并且αm随着em的减小而增大,也就是说分类误差率越小的基分类器
α
m
≥
0
,
并
且
α
m
随
着
e
m
的
减
小
而
增
大
,
也
就
是
说
分
类
误
差
率
越
小
的
基
分
类
器
在最终分类器中的作用越大
在
最
终
分
类
器
中
的
作
用
越
大
④更新训练数据集的权值分布
Dm+1
D
m
+
1
Dm+1=(wm+1,1,wm+1,2,...,wm+1,N)
D
m
+
1
=
(
w
m
+
1
,
1
,
w
m
+
1
,
2
,
.
.
.
,
w
m
+
1
,
N
)
更新权值分布即更新每一个样本的权重,可以写成下面这种形式:
更
新
权
值
分
布
即
更
新
每
一
个
样
本
的
权
重
,
可
以
写
成
下
面
这
种
形
式
:
wm+1,i= {wmiZme−αm,wmiZmeαm,Gm(xi)=yiGm(xi)≠yi
w
m
+
1
,
i
=
{
w
m
i
Z
m
e
−
α
m
,
G
m
(
x
i
)
=
y
i
w
m
i
Z
m
e
α
m
,
G
m
(
x
i
)
≠
y
i
我们也可以把条件项写到式子里,因为yi和Gm(xi)的取值都为−1或+1,也就
我
们
也
可
以
把
条
件
项
写
到
式
子
里
,
因
为
y
i
和
G
m
(
x
i
)
的
取
值
都
为
−
1
或
+
1
,
也
就
是说当Gm(xi)=yi时,yiGm(xi)=1;当Gm(xi)≠yi时,yiGm(xi)=−1
是
说
当
G
m
(
x
i
)
=
y
i
时
,
y
i
G
m
(
x
i
)
=
1
;
当
G
m
(
x
i
)
≠
y
i
时
,
y
i
G
m
(
x
i
)
=
−
1
因此上式可以写为:
因
此
上
式
可
以
写
为
:
wm+1,i=wmiZme−αmyiGm(xi)
w
m
+
1
,
i
=
w
m
i
Z
m
e
−
α
m
y
i
G
m
(
x
i
)
上式中的Zm是规范化因子,它使Dm+1成为一个概率分布
上
式
中
的
Z
m
是
规
范
化
因
子
,
它
使
D
m
+
1
成
为
一
个
概
率
分
布
Zm=∑i=1Nwmie−αmyiGm(xi)
Z
m
=
∑
i
=
1
N
w
m
i
e
−
α
m
y
i
G
m
(
x
i
)
(3)对第(2)步中学习到的M个基分类器进行线性组合得到最终分类器
线性组合:
f(x)=∑m=1MαmGm(x)
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
最终分类器:
G(x)=sign(f(x))=sign(∑m=1MαmGm(x))
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
算法过程如下图:
【AdaBoost算法的训练误差分析】
AdaBoost算法最基本的性质就是在学习过程中不断减少训练误差,即减少训练数据集上的分类误差率。对于AdaBoost算法来说,其最终分类器的训练误差是有上界的。而对于下界,我们不需要知道。
其训练误差界为:
1N∑i=1NI(G(xi)≠yi)≤1N∑i=1Ne−yif(xi)=∏m=1MZm
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
≤
1
N
∑
i
=
1
N
e
−
y
i
f
(
x
i
)
=
∏
m
=
1
M
Z
m
1N∑i=1NI(G(xi)≠yi)即N个样本中被误分类的样本个数N,对上式的证明如下:
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
即
N个样本中被误分类的样本个数
N
,
对
上
式
的
证
明
如
下
:
前半部分:
1N∑i=1NI(G(xi)≠yi)≤1N∑i=1Ne−yif(xi)
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
≤
1
N
∑
i
=
1
N
e
−
y
i
f
(
x
i
)
当G(xi)≠yi时,yif(xi)<0,则e−yif(xi)≥1,由此可得前半部分
当
G
(
x
i
)
≠
y
i
时
,
y
i
f
(
x
i
)
<
0
,
则
e
−
y
i
f
(
x
i
)
≥
1
,
由
此
可
得
前
半
部
分
后半部分:
1N∑i=1Ne−yif(xi)=∏m=1MZm
1
N
∑
i
=
1
N
e
−
y
i
f
(
x
i
)
=
∏
m
=
1
M
Z
m
已知
f(xi)=∑m=1MαmGm(xi)
f
(
x
i
)
=
∑
m
=
1
M
α
m
G
m
(
x
i
)
,
Zmwm+1,i=wmie−αmyiGm(xi)
Z
m
w
m
+
1
,
i
=
w
m
i
e
−
α
m
y
i
G
m
(
x
i
)
1N∑i=1Ne−yif(xi)=1N∑i=1Ne−∑m=1MαmyiGm(xi)=1N∑i=1N∏m=1Me−αmyiGm(xi)
1
N
∑
i
=
1
N
e
−
y
i
f
(
x
i
)
=
1
N
∑
i
=
1
N
e
−
∑
m
=
1
M
α
m
y
i
G
m
(
x
i
)
=
1
N
∑
i
=
1
N
∏
m
=
1
M
e
−
α
m
y
i
G
m
(
x
i
)
=∑i=1Nw1i∏m=1Me−αmyiGm(xi)
=
∑
i
=
1
N
w
1
i
∏
m
=
1
M
e
−
α
m
y
i
G
m
(
x
i
)
此处我们将1N看成w1i,因为w1i就是均匀的权值分布
此
处
我
们
将
1
N
看
成
w
1
i
,
因
为
w
1
i
就
是
均
匀
的
权
值
分
布
=∑i=1Nw1ie−α1yiG1(xi)∏m=2Me−αmyiGm(xi)
=
∑
i
=
1
N
w
1
i
e
−
α
1
y
i
G
1
(
x
i
)
∏
m
=
2
M
e
−
α
m
y
i
G
m
(
x
i
)
(观察∑i=1Nw1ie−α1yiG1(xi)可以发现就等于Z1∑i=1Nw2i)
(
观
察
∑
i
=
1
N
w
1
i
e
−
α
1
y
i
G
1
(
x
i
)
可
以
发
现
就
等
于
Z
1
∑
i
=
1
N
w
2
i
)
=Z1∑i=1Nw2i∏m=2Me−αmyiGm(xi)=Z1∑i=1Nw2ie−α2yiG2(xi)∏m=3Me−αmyiGm(xi)
=
Z
1
∑
i
=
1
N
w
2
i
∏
m
=
2
M
e
−
α
m
y
i
G
m
(
x
i
)
=
Z
1
∑
i
=
1
N
w
2
i
e
−
α
2
y
i
G
2
(
x
i
)
∏
m
=
3
M
e
−
α
m
y
i
G
m
(
x
i
)
=Z1Z2∑i=1Nw3i∏m=3Me−αmyiGm(xi)
=
Z
1
Z
2
∑
i
=
1
N
w
3
i
∏
m
=
3
M
e
−
α
m
y
i
G
m
(
x
i
)
=...=Z1Z2...ZM−1∑i=1NwMie−αMyiGM(xi)=∏m=1MZm
=
.
.
.
=
Z
1
Z
2
.
.
.
Z
M
−
1
∑
i
=
1
N
w
M
i
e
−
α
M
y
i
G
M
(
x
i
)
=
∏
m
=
1
M
Z
m
我们根据这样的结论可以在每一轮选取适当的 Gm G m 使得 Zm Z m 最小,从而使训练误差下降最快。 注意,这里是只对每一轮的Zm使其最小化,不是对Zm的乘积最小化 注 意 , 这 里 是 只 对 每 一 轮 的 Z m 使 其 最 小 化 , 不 是 对 Z m 的 乘 积 最 小 化
对于二类分类的AdaBoost的训练误差界为:
由于
Zm=∑i=1Nwmie−αmyiGm(xi)=∑yi=Gm(xi)wmie−αm+∑yi≠Gm(xi)wmieαm
Z
m
=
∑
i
=
1
N
w
m
i
e
−
α
m
y
i
G
m
(
x
i
)
=
∑
y
i
=
G
m
(
x
i
)
w
m
i
e
−
α
m
+
∑
y
i
≠
G
m
(
x
i
)
w
m
i
e
α
m
∑yi=Gm(xi)wmi=1−em
∑
y
i
=
G
m
(
x
i
)
w
m
i
=
1
−
e
m
∑yi≠Gm(xi)wmi=em
∑
y
i
≠
G
m
(
x
i
)
w
m
i
=
e
m
e−αm=e−12ln1−emem=em1−em−−−−√
e
−
α
m
=
e
−
1
2
l
n
1
−
e
m
e
m
=
e
m
1
−
e
m
eαm=e12ln1−emem=1−emem−−−−√
e
α
m
=
e
1
2
l
n
1
−
e
m
e
m
=
1
−
e
m
e
m
所以
Zm=2em(1−em)−−−−−−−−−√
Z
m
=
2
e
m
(
1
−
e
m
)
,令
γm=12−em
γ
m
=
1
2
−
e
m
,则
Zm=1−4γ2m−−−−−−−√
Z
m
=
1
−
4
γ
m
2
因此∏m=1MZm=∏m=1M2em(1−em)−−−−−−−−−√=∏m=1M1−4γ2m−−−−−−−√≤e−2∑m=1Mγ2m
因
此
∏
m
=
1
M
Z
m
=
∏
m
=
1
M
2
e
m
(
1
−
e
m
)
=
∏
m
=
1
M
1
−
4
γ
m
2
≤
e
−
2
∑
m
=
1
M
γ
m
2
此处的e−2∑m=1Mγ2m是通过ex和1−x−−−−−√在点x=0的泰勒展开式推出的,推导如下:
此
处
的
e
−
2
∑
m
=
1
M
γ
m
2
是
通
过
e
x
和
1
−
x
在
点
x
=
0
的
泰
勒
展
开
式
推
出
的
,
推
导
如
下
:
ex在x=0处泰勒展开:
e
x
在
x
=
0
处
泰
勒
展
开
:
ex=1+x+12x2+o(x2)
e
x
=
1
+
x
+
1
2
x
2
+
o
(
x
2
)
e−2γ2m=1−2γ2m+12(−2γ2m)2=1−2γ2m+2γ4m
e
−
2
γ
m
2
=
1
−
2
γ
m
2
+
1
2
(
−
2
γ
m
2
)
2
=
1
−
2
γ
m
2
+
2
γ
m
4
1−x−−−−−√在x=0处泰勒展开:
1
−
x
在
x
=
0
处
泰
勒
展
开
:
1−x−−−−−√=1−12x−18x2+o(x2)
1
−
x
=
1
−
1
2
x
−
1
8
x
2
+
o
(
x
2
)
1−4γ2m−−−−−−−√=1−124γ2m−18(4γ2m)2=1−2γ2m−2γ4m
1
−
4
γ
m
2
=
1
−
1
2
4
γ
m
2
−
1
8
(
4
γ
m
2
)
2
=
1
−
2
γ
m
2
−
2
γ
m
4
因此1−4γ2m−−−−−−−√≤e−2γ2m
因
此
1
−
4
γ
m
2
≤
e
−
2
γ
m
2
如果存在γ>0,对所有m有γm≥γ,则1N∑i=1NI(G(xi)≠yi)≤e−2Mγ2
如
果
存
在
γ
>
0
,
对
所
有
m
有
γ
m
≥
γ
,
则
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
≤
e
−
2
M
γ
2
在此条件下,我们可以发现AdaBoost的训练误差是以指数速率下降的
在
此
条
件
下
,
我
们
可
以
发
现
A
d
a
B
o
o
s
t
的
训
练
误
差
是
以
指
数
速
率
下
降
的
下一篇会讨论前向分步算法和提升树,其实感觉前向分步算法加基函数线性组合就是一个框架,而AdaBoost算法和提升树都是利用这个框架来实现的。它们的不同点大多在于损失函数,而对于难以优化的损失函数我们会用梯度提升(最速下降的近似方法)来求解,这也就是梯度提升树的由来。
参考文献:《统计学习方法》