集成学习——Boosting
Boosting
分类问题中,通过改变训练数据的权值学习多个弱分类器,并将多个弱分类器进行线性组合,形成一个强分类器。
具有代表性的算法:
- AdaBoost
- 提升树
一、AdaBoost
-
如何改变训练数据的权值?
A:对上一轮分类错误的样本加大权重,对分类正确的样本减小权重,使得当前分类器更加注意分类错误的样本。则分类问题被多个弱分类器“分而治之” -
如何将弱分类器进行线性组合获取强分类器?
A:采用多数表决的方法:加大分类误差率小的弱分类器的权值,使其在表决过程中起较大的作用,较小分类误差率大的弱分类器的权值,使其在表决过程中起较小的作用
AdaBoost算法
输入:训练数据
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
N
)
T={(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})}
T=(x1,y1),(x2,y2),⋯,(xN,yN),其中
x
i
∈
X
⊆
R
n
,
y
i
∈
Y
=
{
+
1
,
−
1
}
x_{i}\in \mathcal{X} \subseteq R^{n}, y_{i}\in \mathcal{Y}=\{+1, -1\}
xi∈X⊆Rn,yi∈Y={+1,−1};弱分类器
输出:强分类器
G
(
x
)
G(x)
G(x)
(1)初始化训练数据的权值分布
D
1
=
{
w
11
,
⋯
,
w
1
i
,
⋯
,
w
1
N
}
,
w
1
i
=
1
N
,
i
=
1
,
2
,
⋯
,
N
D_{1}=\{w_{11},\cdots,w_{1i},\cdots,w_{1N}\},w_{1i}=\frac{1}{N},i=1,2,\cdots,N
D1={w11,⋯,w1i,⋯,w1N},w1i=N1,i=1,2,⋯,N
(2)对
m
=
1
,
2
,
⋯
,
M
m=1,2,\cdots,M
m=1,2,⋯,M
1. 使用具有权值分布
D
m
D_{m}
Dm的训练数据集学习,得到基本分类器:
G
m
:
X
→
{
+
1
,
−
1
}
G_{m}:\mathcal{X}\to \{+1,-1\}
Gm:X→{+1,−1}
2. 计算
G
m
G_{m}
Gm在训练数据集上的分类误差率:
e
m
=
∑
i
=
1
N
P
(
G
m
(
x
i
)
≠
y
i
)
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
)
=
∑
G
(
x
i
)
≠
y
i
w
m
i
e_{m}=\sum_{i=1}^{N}P(G_{m}(x_{i})\ne y_{i})=\sum_{i=1}^{N}w_{mi}\mathcal{I}(G_{m}(x_{i})\ne y_{i})=\sum_{G(x_{i})\ne y_{i}}w_{mi}
em=i=1∑NP(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi)=yi)=G(xi)=yi∑wmi
3. 计算弱分类器
G
m
G_{m}
Gm的组合系数
α
m
\alpha_{m}
αm:
α
m
=
1
2
l
o
g
1
−
e
m
e
m
\alpha_{m}=\frac{1}{2}log\frac{1-e_{m}}{e_{m}}
αm=21logem1−em
4. 更新训练数据的权值分布:
D
m
+
1
=
{
w
m
+
1
,
1
,
⋯
,
w
m
+
1
,
i
,
⋯
,
w
m
+
1
,
N
}
D_{m+1}=\{w_{m+1,1},\cdots,w_{m+1,i},\cdots,w_{m+1,N}\}
Dm+1={wm+1,1,⋯,wm+1,i,⋯,wm+1,N}
其中
w
m
+
1
,
i
=
w
m
i
Z
m
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
w_{m+1,i}=\frac{w_{mi}}{Z_{m}}exp(-\alpha_{m}y_{i}G_{m}(x_{i}))
wm+1,i=Zmwmiexp(−αmyiGm(xi)),
∑
i
=
1
N
w
m
,
i
=
1
\sum_{i=1}^{N}w_{m,i}=1
∑i=1Nwm,i=1,
Z
m
Z_{m}
Zm为规范化因子,即
Z
m
=
∑
i
=
1
N
w
m
i
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
Z_{m}=\sum_{i=1}^{N}w_{mi}exp(-\alpha_{m}y_{i}G_{m}(x_{i}))
Zm=∑i=1Nwmiexp(−αmyiGm(xi)),
D
M
+
1
D_{M+1}
DM+1成为一个概率分布。
(3)构建基本分类器的线性组合:
f
(
x
)
=
∑
i
=
1
M
α
i
G
m
(
x
)
f(x)=\sum_{i=1}^{M}\alpha_{i}G_{m}(x)
f(x)=i=1∑MαiGm(x)
得到最终分类器:
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
G(x)=sign(f(x))
G(x)=sign(f(x))
说明:
(1)首先假设训练数据具有均值分布,保证能够在原始数据集上学习
G
1
(
x
)
G_{1}(x)
G1(x)
(2)反复学习基本分类器,在每一轮
m
=
1
,
2
,
⋯
,
M
m=1,2,\cdots,M
m=1,2,⋯,M中执行以下操作:
a)使用当前分布
D
m
D_{m}
Dm加权的训练数据集学习基本分类器
G
m
(
x
)
G_{m}(x)
Gm(x)
b)计算当前分类器在加权训练数据集上的分类误差率
e
m
e_{m}
em
c)计算基本分类器的组合系数
α
m
\alpha_{m}
αm,
e
m
e_{m}
em表示
G
m
G_{m}
Gm在最终分类器中的重要性,当
e
m
≤
1
2
e_{m}\le\frac{1}{2}
em≤21时,
α
≥
0
\alpha \ge 0
α≥0,并且
α
\alpha
α随着
e
m
e_{m}
em的减小而增大
d)更新训练数据的权值:误分类样本的权值被放大
e
x
p
(
2
α
m
)
exp(2\alpha_{m})
exp(2αm)
二、前向分布算法
加法模型:
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
,
γ
m
)
f(x)=\sum_{m=1}^{M}\beta_{m}b(x,\gamma_{m})
f(x)=m=1∑Mβmb(x,γm)其中,
b
(
x
,
γ
m
)
b(x,\gamma_{m})
b(x,γm)为基函数,
β
m
\beta_{m}
βm表示基函数的系数
给定训练数据和损失函数
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x))的条件下,极小化损失函数学习加法模型:
m
i
n
γ
m
,
β
m
L
(
y
i
,
f
(
x
)
)
\underset{\gamma_{m},\beta_{m}}{min}L(y_{i},f(x))
γm,βmminL(yi,f(x))
直接优化上述问题较困难,优化思想:从前往后,每一步优化一个基函数及其系数,简化优化的复杂度
前向分布算法
输入:训练数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
N
)
T={(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})}
T=(x1,y1),(x2,y2),⋯,(xN,yN),损失函数
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x)),基函数集
{
b
(
x
;
γ
)
}
\{b(x;\gamma)\}
{b(x;γ)}
输出:加法模型:
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
,
γ
m
)
f(x)=\sum_{m=1}^{M}\beta_{m}b(x,\gamma_{m})
f(x)=m=1∑Mβmb(x,γm)
(1)初始化
f
0
(
x
)
=
0
f_{0}(x)=0
f0(x)=0
(2)对
m
=
1
,
2
,
⋯
,
M
,
m=1,2,\cdots,M,
m=1,2,⋯,M,
1. 极小化损失函数:
(
β
m
,
γ
m
)
=
a
r
g
m
i
n
β
,
γ
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
)
+
β
b
(
x
;
γ
)
)
(\beta_{m},\gamma_{m})=\underset{\beta,\gamma}{argmin}\sum_{i=1}^{N}L(y_{i},f_{m-1}(x)+\beta b(x;\gamma))
(βm,γm)=β,γargmini=1∑NL(yi,fm−1(x)+βb(x;γ))
得到参数
β
m
,
γ
m
\beta_{m},\gamma_{m}
βm,γm
2. 更新:
f
m
(
x
)
=
f
m
−
1
+
β
m
b
(
x
,
γ
m
)
f_{m}(x)=f_{m-1}+\beta_{m} b(x,\gamma_{m})
fm(x)=fm−1+βmb(x,γm)
(3)得到加法模型
f
(
x
)
=
f
M
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
,
γ
m
)
f(x)=f_{M}(x)=\sum_{m=1}^{M}\beta_{m}b(x,\gamma_{m})
f(x)=fM(x)=m=1∑Mβmb(x,γm)
三、提升树
提升树是以分类树或回归树为基本分类器的Boosting
可以表示为决策树的加法模型:
f
(
x
)
=
∑
i
=
1
M
T
(
x
,
Θ
m
)
f(x)=\sum_{i=1}^{M} T(x,\Theta_{m})
f(x)=i=1∑MT(x,Θm)
提升树算法
采用前向分布算法
输入:初始提升树
f
0
(
x
)
=
0
f_{0}(x)=0
f0(x)=0,第
m
m
m步的模型为:
f
m
=
f
m
−
1
+
T
(
x
,
Θ
m
)
f_{m}=f_{m-1}+T(x,\Theta_{m})
fm=fm−1+T(x,Θm)
其中,
f
m
−
1
f_{m-1}
fm−1为当前模型,通过经验风险最小化确定下一棵决策树的参数:
Θ
m
\Theta_{m}
Θm
Θ
^
m
=
a
r
g
m
i
n
Θ
m
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
,
Θ
m
)
\hat{\Theta}_{m}=\underset{\Theta_{m}}{arg min}\sum_{i=1}^{N}L(y_{i},f_{m-1}(x_{i})+T(x_{i},\Theta_{m})
Θ^m=Θmargmini=1∑NL(yi,fm−1(xi)+T(xi,Θm)
对于二分类问题,基础分类器为二分类树
对于回归问题:将输入空间划分为
J
J
J个互不相交的趋于
R
i
,
⋯
,
R
J
R_{i},\cdots,R_{J}
Ri,⋯,RJ
将树表示为
T
(
x
,
Θ
m
)
=
∑
j
=
1
J
c
j
I
(
x
∈
R
j
)
T(x,\Theta_{m})=\sum_{j=1}^{J}c_{j}I(x\in R_{j})
T(x,Θm)=j=1∑JcjI(x∈Rj)
参数
Θ
=
{
(
R
1
,
c
1
)
,
⋯
,
(
R
m
,
c
m
)
}
\Theta=\{(R_{1},c_{1}),\cdots,(R_{m},c_{m})\}
Θ={(R1,c1),⋯,(Rm,cm)}表示树的区域划分和各区域上的常数,
J
J
J表示回归树的叶子节点树(复杂度)
采用平方损失函数,
L
(
y
,
f
(
x
)
)
=
(
y
−
f
(
x
)
)
2
L(y,f(x))=(y-f(x))^{2}
L(y,f(x))=(y−f(x))2
则损失
L
(
y
,
f
m
−
1
(
x
)
+
T
(
x
,
Θ
m
)
)
=
(
y
−
f
m
−
1
(
x
)
−
T
(
x
,
Θ
m
)
)
2
=
(
r
−
T
(
x
,
Θ
m
)
)
2
L(y,f_{m-1}(x)+T(x,\Theta_{m}))=(y-f_{m-1}(x)-T(x,\Theta_{m}))^{2}=(r-T(x,\Theta_{m}))^{2}
L(y,fm−1(x)+T(x,Θm))=(y−fm−1(x)−T(x,Θm))2=(r−T(x,Θm))2
其中,
r
=
y
−
f
m
−
1
(
x
)
r=y-f_{m-1}(x)
r=y−fm−1(x)表示当前模型残差,即只需要用
T
(
x
,
Θ
m
)
T(x,\Theta_{m})
T(x,Θm)拟合该残差
总结
- Boosting是将弱分类器提升为强分类器的算法,通过不断修改训练数据的权值分布,构建一系列弱分类器,然后将弱分类器线性组合,构成一个强分类器。代表性的算法:AdaBoost,
弱分类器的线性组合模型为
f ( x ) = ∑ i = 1 M α m G m ( x ) f(x)=\sum_{i=1}^{M}\alpha_{m}G_{m}(x) f(x)=i=1∑MαmGm(x) - AdaBoost 的特点:通过迭代每次学习一个弱分类器。
每次迭代中,提高前一轮被分类错误样本的权重,降低被分类正确样本的权重。最后,将基本分类器的现象组合作为强分类器,其中给分类误差率小的基本分类器以较大的权值,给分类误差率大的基本分类器以较小的权值 - AdaBoost本质是一个前向分布算法
- 提升树是以分类树或回归树为基本分类器的Boosting