概述: a d a b o o s t adaboost adaboost是集成学习的一种, 意思是建立多个弱分类器, 然后用这些弱分类器的线性加权组合来形成一个强分类器. 什么是弱分类器呢, 就是只比胡猜稍微好一点的分类器, 训练这些弱分类器是一个迭代的过程, 在这个过程里, 下一个弱分类器总是更加关注上一个弱分类器没有分好的数据样本, 以弥补之前弱分类器的不足, a d a b o o s t adaboost adaboost就是类似"以弱搏强”的算法.
一、从零推导adaboost
我们首先有一个弱分类器
h
(
x
)
h(x)
h(x), 它输出的值非
1
1
1即
−
1
-1
−1,
h
(
x
)
∈
{
1
,
−
1
}
h(x) \in \{1, -1\}
h(x)∈{1,−1},
a
d
a
b
o
o
s
t
adaboost
adaboost的思路是把这些弱分类器的预测结果都加起来, 然后取他们的均值, 在我们的推导过程中, 假设我们要解决的问题是一个二项分类问题, 则我们要把这些弱分类器都加起来取
s
i
g
n
sign
sign, 则有:
H
(
x
)
=
s
i
g
n
(
∑
t
=
1
T
h
t
(
x
)
)
H(x)=sign(\sum_{t=1}^T h^t(x))
H(x)=sign(t=1∑Tht(x))
上式中
H
(
x
)
H(x)
H(x)是一个强分类器,
x
x
x是数据或特征值,
t
t
t指的是弱分类器的个数, 上式的意思是对弱分类器的输出值求和并取
s
i
g
n
sign
sign,
H
(
x
)
∈
{
1
,
−
1
}
H(x) \in \{1, -1\}
H(x)∈{1,−1}
然后我们发现只对弱分类器求和好像少了点什么, 没错, 我们要赋予每个弱分类器不同的权重:
H
(
x
)
=
s
i
g
n
(
∑
t
=
1
T
α
t
h
t
(
x
)
)
H(x)=sign(\sum_{t=1}^T \alpha^t h^t(x))
H(x)=sign(t=1∑Tαtht(x))
上式中
α
\alpha
α指的是第
t
t
t个弱分类器的权重.
在
a
d
a
b
o
o
s
t
adaboost
adaboost中, 这么多弱分类器, 是凭什么依据划分的呢, 其实每个弱分类器关注的是前面弱分类器没有分对的数据样本, 比如说第
t
t
t个弱分类器犯了一些错误, 导致有些数据样本没有分对, 那么第
t
+
1
t+1
t+1个弱分类器就会更加关注前面没有分对的数据点, 尝试弥补第
t
t
t个弱分类器的不足.
假设我们有一些数据样本
{
(
x
1
,
y
1
)
,
…
,
(
x
N
,
y
N
)
}
\{(x_{1},y_{1}),\ldots ,(x_{N},y_{N})\}
{(x1,y1),…,(xN,yN)}, 其中
y
i
∈
{
−
1
,
1
}
y_{i}\in \{-1,1\}
yi∈{−1,1},
N
N
N是数据样本的个数, 我们要解决的是二项分类问题.
我们需要给每一个数据样本赋一个权重, 以控制每个弱分类器应该更加关注哪些数据样本, 我们需要让下一个弱分类器更加关注它前面的弱分类器没有分对的数据点, 设
x
i
x_i
xi在第
t
t
t个弱分类器上的权重为
w
i
t
w^t_i
wit, 我们首先初始化, 在第
1
1
1个弱分类器上所有数据点的权重都是一样的, 即:
w
i
t
=
1
=
1
N
w^{t=1}_i=\frac{1}{N}
wit=1=N1
初始化错误率
ϵ
\epsilon
ϵ为, 比如说
100
100
100个数据点, 分错了40个, 则
ϵ
=
0.4
\epsilon=0.4
ϵ=0.4,
ϵ
\epsilon
ϵ取值在
0
0
0到
1
1
1之间:
ϵ
=
∑
y
i
≠
h
i
(
x
)
1
N
ϵ
∈
[
0
,
1
]
\epsilon=\sum_{y_i \neq h_i(x)}\frac{1}{N} \quad \epsilon \in [0, 1]
ϵ=yi=hi(x)∑N1ϵ∈[0,1]
将
w
i
w_i
wi代入
ϵ
\epsilon
ϵ, 得出:
ϵ
=
∑
y
i
≠
h
i
(
x
)
w
i
;
∑
w
i
=
1
(eq. 1)
\epsilon=\sum_{y_i \neq h_i(x)}w_i ; \quad \sum w_i =1\tag{eq. 1}
ϵ=yi=hi(x)∑wi;∑wi=1(eq. 1)
那我们怎么确定下一个弱分类器需要关注哪些数据样本呢? 当我们定义好当前的弱分类器
h
t
(
x
)
h^t(x)
ht(x)之后, 做以下操作:
w
i
t
+
1
=
w
i
t
Z
e
−
α
t
h
t
(
x
i
)
y
i
w^{t+1}_{i}=\frac{w^{t}_{i}}{Z}e^{-\alpha^t h^t(x_i) y_i}
wit+1=Zwite−αtht(xi)yi
上式中
Z
Z
Z是归一化因子, 因为我们想要
∑
w
i
=
1
\sum w_i =1
∑wi=1, 怎么理解这个式子呢, 首先
α
\alpha
α是正数, 当
h
t
(
x
i
)
=
y
i
h^t(x_i)=y_i
ht(xi)=yi的时候,
h
t
(
x
i
)
y
i
h^t(x_i)y_i
ht(xi)yi的是
1
1
1, 否则是
−
1
-1
−1, 不难看出当当前弱分类器
h
t
(
x
i
)
h^t(x_i)
ht(xi)预测正确的时候,
w
t
+
1
=
w^{t+1}=
wt+1=会变小, 而错误的时候,
w
t
+
1
w^{t+1}
wt+1会变大:
w
i
t
+
1
=
{
1
Z
w
i
t
e
−
α
t
if
y
i
=
h
t
(
x
i
)
,
1
Z
w
i
t
e
α
t
if
y
i
≠
h
t
(
x
i
)
.
(eq. 2)
{\displaystyle w^{t+1}_{i}={\begin{cases} \frac{1}{Z} w_{i}^{t}e^{-\alpha ^{t}}&{\text{if }}y_{i}=h^{t}(x_{i}), \\ \frac{1}{Z} w_{i}^{t}e^{\alpha ^{t}}&{\text{if }}{y_{i} \neq h^{t}(x_{i})}.\end{cases}}}\tag{eq. 2}
wit+1={Z1wite−αtZ1witeαtif yi=ht(xi),if yi=ht(xi).(eq. 2)
注意我们暂且不管
Z
Z
Z.
我们现在要求所有未归一的权重的和, 并求出可以使它最小的
α
\alpha
α, 我们把未归一的权重的和定义为
E
E
E, 因为分错的样本输入到下一个弱分类器的权重(未归一)为
w
i
t
e
α
t
w_{i}^{t}e^{\alpha ^{t}}
witeαt(见
e
q
.
2
eq.2
eq.2), 则分错的样本越多
E
E
E会越大, 相反分对的样本越多
E
E
E越小.
E
=
∑
y
i
=
h
t
(
x
i
)
w
i
t
e
−
α
t
+
∑
y
i
≠
h
t
(
x
i
)
w
i
t
e
α
t
E= \sum _{y_{i}=h^{t}(x_{i})}w_{i}^{t}e^{-\alpha ^{t}}+\sum _{y_{i}\neq h^{t}(x_{i})}w_{i}^{t}e^{\alpha ^{t}}
E=yi=ht(xi)∑wite−αt+yi=ht(xi)∑witeαt
上式左边加上
∑
y
i
≠
h
t
(
x
i
)
w
i
t
e
−
α
t
\sum _{y_{i}\neq h^{t}(x_{i})} w_{i}^{t} e^{-\alpha ^{t}}
∑yi=ht(xi)wite−αt, 右边再减去.
E
=
∑
i
=
1
N
w
i
t
e
−
α
t
+
∑
y
i
≠
h
t
(
x
i
)
w
i
t
(
e
α
t
−
e
−
α
t
)
E= \sum _{i=1}^{N}w_{i}^{t} e^{-\alpha ^{t}}+\sum _{y_{i}\neq h^{t}(x_{i})}w_{i}^{t}(e^{\alpha ^{t}} - e^{-\alpha ^{t}})
E=i=1∑Nwite−αt+yi=ht(xi)∑wit(eαt−e−αt)
上式中可看出, 上式左边跟我们当前的弱分类器
h
t
(
x
)
h^{t}(x)
ht(x)无关, 当前的弱分类器只对右式起作用, 也就是右式控制着
E
E
E的大小, 为了得到我们想要的
α
\alpha
α, 我们要求
E
E
E对于
α
t
\alpha^{t}
αt的导数, 并把它设为
0
0
0, 求出
α
t
\alpha^{t}
αt的值, 注意下边我们会把等式左边省略掉, 因为它可看作一个常数.
d
E
d
α
t
=
−
∑
y
i
=
h
t
(
x
i
)
w
i
t
e
−
α
t
+
∑
y
i
≠
h
t
(
x
i
)
w
i
t
e
α
t
=
0
{\frac {d E}{d\alpha ^{t}}}=-\sum _{y_{i}= h^{t}(x_{i})}w_{i}^{t}e^{-\alpha ^{t}}+\sum _{y_{i}\neq h^{t}(x_{i})}w_{i}^{t}e^{\alpha ^{t}}=0
dαtdE=−yi=ht(xi)∑wite−αt+yi=ht(xi)∑witeαt=0
解上面的式子, 这里省略过程, 因为比较简单, 大概解法是将
e
α
t
e^{\alpha ^{t}}
eαt和
e
−
α
t
e^{-\alpha ^{t}}
e−αt提到求和符号外面来, 同时取
log
\log
log, 化简, 得到
α
t
\alpha^{t}
αt:
α
t
=
1
2
log
(
∑
y
i
=
h
t
(
x
i
)
w
i
t
∑
y
i
≠
h
t
(
x
i
)
w
i
t
)
=
1
2
log
(
1
−
ϵ
t
ϵ
t
)
\alpha ^{t}={\dfrac {1}{2}}\log \left({\dfrac {\sum _{y_{i}=h^{t}(x_{i})}w_{i}^{t}}{\sum _{y_{i}\neq h^{t}(x_{i})}w_{i}^t}}\right)={\dfrac {1}{2}}\log \left(\dfrac {1-\epsilon^{t}}{\epsilon^{t}}\right)
αt=21log(∑yi=ht(xi)wit∑yi=ht(xi)wit)=21log(ϵt1−ϵt)
将
α
t
\alpha ^{t}
αt带入到
(
e
q
.
2
)
(eq. 2)
(eq.2)里, 得到下式, 注意这里用到了
e
l
o
g
e
(
x
)
=
x
e^{log_e(x)}=x
eloge(x)=x:
w
i
t
+
1
=
1
Z
w
i
t
{
ϵ
t
1
−
ϵ
t
if
y
i
=
h
t
(
x
i
)
,
1
−
ϵ
t
ϵ
t
if
y
i
≠
h
t
(
x
i
)
.
(eq. 3)
{\displaystyle w^{t+1}_{i}=\frac{1}{Z} w_{i}^{t}{\begin{cases} \sqrt{\frac{\epsilon^{t}}{1-\epsilon^{t}}} &{\text{if }}y_{i}=h^{t}(x_{i}), \\ \sqrt{\frac{1-\epsilon^{t}}{\epsilon^{t}}} &{\text{if }}{y_{i} \neq h^{t}(x_{i})}.\end{cases}}}\tag{eq. 3}
wit+1=Z1wit⎩⎨⎧1−ϵtϵtϵt1−ϵtif yi=ht(xi),if yi=ht(xi).(eq. 3)
我们求
Z
Z
Z,
Z
Z
Z是所有数据样本权重的和也就是所有
w
i
t
+
1
w^{t+1}_{i}
wit+1取值的和:
Z
=
ϵ
t
1
−
ϵ
t
∑
y
i
=
h
t
(
x
i
)
w
i
t
+
1
−
ϵ
t
ϵ
t
∑
y
i
≠
h
t
(
x
i
)
w
i
t
Z=\sqrt{\frac{\epsilon^{t}}{1-\epsilon^{t}}} \sum _{y_{i}= h^{t}(x_{i})}w^{t}_i + \sqrt{\frac{1-\epsilon^{t}}{\epsilon^{t}}} \sum _{y_{i}\neq h^{t}(x_{i})}w^{t}_i
Z=1−ϵtϵtyi=ht(xi)∑wit+ϵt1−ϵtyi=ht(xi)∑wit
将
ϵ
=
∑
y
i
≠
h
i
(
x
)
w
i
\epsilon=\sum_{y_i \neq h_i(x)}w_i
ϵ=∑yi=hi(x)wi代入上式, 得出:
Z
=
ϵ
t
1
−
ϵ
t
(
1
−
ϵ
t
)
+
1
−
ϵ
t
ϵ
t
ϵ
t
=
2
ϵ
t
(
1
−
ϵ
t
)
Z=\sqrt{\frac{\epsilon^{t}}{1-\epsilon^{t}}} (1-\epsilon^t) + \sqrt{\frac{1-\epsilon^{t}}{\epsilon^{t}}} \epsilon^t=2 \sqrt{\epsilon^t(1-\epsilon^t)}
Z=1−ϵtϵt(1−ϵt)+ϵt1−ϵtϵt=2ϵt(1−ϵt)
将
Z
Z
Z代入
(
e
q
.
3
)
(eq.3)
(eq.3)里:
w
i
t
+
1
=
{
w
i
t
2
(
1
−
ϵ
t
)
if
y
i
=
h
t
(
x
i
)
,
w
i
t
2
ϵ
t
if
y
i
≠
h
t
(
x
i
)
.
(eq. 4)
{\displaystyle w^{t+1}_{i}={\begin{cases} \frac{w_{i}^{t}}{2(1-\epsilon^{t})} &{\text{if }}y_{i}=h^{t}(x_{i}), \\ \frac{w_{i}^{t}}{2\epsilon^{t}} &{\text{if }}{y_{i} \neq h^{t}(x_{i})}.\end{cases}}}\tag{eq. 4}
wit+1={2(1−ϵt)wit2ϵtwitif yi=ht(xi),if yi=ht(xi).(eq. 4)
我们通过上式还是很难看出
w
i
t
+
1
w^{t+1}_i
wit+1的意义到底是什么, 没关系, 接下来就恍然大悟了, 下面我们求数据点中分类正确的样本和分类错误样本各自
w
i
t
+
1
w^{t+1}_i
wit+1的合:
∑
y
i
=
h
t
(
x
i
)
w
i
t
+
1
=
∑
y
i
=
h
t
(
x
i
)
w
i
t
2
(
1
−
ϵ
t
)
\sum_{y_{i}=h^{t}(x_{i})}w^{t+1}_i=\frac{\sum_{y_{i}=h^{t}(x_{i})} w_{i}^{t}}{2(1-\epsilon^{t})}
yi=ht(xi)∑wit+1=2(1−ϵt)∑yi=ht(xi)wit
我们又知道
∑
y
i
≠
h
t
(
x
i
)
w
i
t
=
ϵ
t
\sum_{y_{i}\neq h^{t}(x_{i})} w_{i}^{t}=\epsilon^t
∑yi=ht(xi)wit=ϵt, 得出
∑
y
i
=
h
t
(
x
i
)
w
i
t
=
1
−
ϵ
t
\sum_{y_{i}=h^{t}(x_{i})} w_{i}^{t}=1-\epsilon^t
∑yi=ht(xi)wit=1−ϵt, 代入上式:
∑
y
i
=
h
t
(
x
i
)
w
i
t
+
1
=
1
−
ϵ
t
2
(
1
−
ϵ
t
)
=
1
2
\sum_{y_{i}=h^{t}(x_{i})}w^{t+1}_i=\frac{1-\epsilon^t}{2(1-\epsilon^{t})}=\frac{1}{2}
yi=ht(xi)∑wit+1=2(1−ϵt)1−ϵt=21
又因为
∑
w
i
=
1
\sum w_i =1
∑wi=1, 得出:
∑
y
i
≠
h
t
(
x
i
)
w
i
t
+
1
=
1
−
∑
y
i
=
h
t
(
x
i
)
w
i
t
+
1
=
1
−
1
2
=
1
2
\sum_{y_{i} \neq h^{t}(x_{i})}w^{t+1}_i=1-\sum_{y_{i}=h^{t}(x_{i})}w^{t+1}_i=1-\frac{1}{2}=\frac{1}{2}
yi=ht(xi)∑wit+1=1−yi=ht(xi)∑wit+1=1−21=21
上式的意义是, 在我们每次增加一个新弱分类器的时候, 前面的弱分类器分错的样本的权重占总样本权重的
1
2
\frac{1}{2}
21, 前面的弱分类器分对的样本的权重也占总样本权重的
1
2
\frac{1}{2}
21
我们把 a d a b o o s t adaboost adaboost的计算步骤梳理一下:
- 初始化 w i 1 = 1 N w^1_i=\frac{1}{N} wi1=N1;
- 在第 t t t步, 选择可以最小化当前错误率 ϵ \epsilon ϵ的弱分类器, 并添加这个弱分类器, 以降低错误率(如果还没有弱分类器, 那就创建一个), 并计算 α t \alpha^t αt, α t = 1 2 log ( 1 − ϵ t ϵ t ) \alpha ^{t}={\dfrac {1}{2}}\log \left(\dfrac {1-\epsilon^{t}}{\epsilon^{t}}\right) αt=21log(ϵt1−ϵt), 定义新的弱分类器为 f t ( x ) = α t h t ( x ) ) f^t(x)=\alpha^t h^t(x)) ft(x)=αtht(x))
- 计算新的数据样本权重 w i t + 1 w^{t+1}_i wit+1, 见 ( e q . 4 ) (eq. 4) (eq.4)
- 回到第2, 直到收敛.
- 得到的模型为: H ( x ) = s i g n ( ∑ t = 1 T α t h t ( x ) ) H(x)=sign(\sum_{t=1}^T \alpha^t h^t(x)) H(x)=sign(∑t=1Tαtht(x))
二、 a d a b o o s t adaboost adaboost的特性:
- 易用, 需要调节的参数少;
- 弱分类器可以是任何模型, 比如逻辑回归, 线性回归等等, 最常用的是决策树桩;
- 对数据敏感, 如果数据有很多噪音, 则 a d a b o o s t adaboost adaboost会倾向于拟合噪音而最终导致模型的过拟合, 为了解决这样的问题, 可以给每一个弱分类器一个学习率权重, 让每个弱分类器最强分类器造成的影响小一些, 或做交叉验证, 让迭代的过程在合适的时机停止;
- 可以用来做特征选择, 举个例子吧, 比如说要评估人群的信用风险, 然后你会有很多这些人的资料, 比如说性别年龄, 居住地址, 收入, 有无不动产等等, 如果你用 a d a b o o s t adaboost adaboost的集成方法来做分类, 在迭代的每一步你需要用一个弱分类器划分数据样本, 假设我们用决策树桩, 决策树桩每次只能选择一个特征值进行划分, 在建模完成之后, 看一下模型里的弱分类器都是靠那些特征进行分类的, 就可以得出每种特征的重要性, 方便我们做特征选择, 剔除多余的特征, 增加计算效率, 减少噪音;
- 注意, 在推导的过程中, 我们对强分类器输出的结果取 s i g n sign sign, 实际中我们可以不单纯取 s i g n sign sign, 而是找一个分类最好的阈值, 或者说边界, 这个阈值不一定为 0 0 0.