基本思路
提升方法是通过改变训练样本的权重,得到一系列弱分类器(基本分类器),然后通过组合这些弱分类器,构成一个强分类器。
- AdaBoost在每一轮如何改变训练数据的权值或概率分布?
提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。 - AdaBoost如何将弱分类器组合成一个强分类器?
采取加权多数表决的方法,具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起到较小的作用。
AdaBoost算法
假设给定一个二分类的训练数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
T={(x_1,y_1), (x_2, y_2),...,(x_N, y_N)}
T=(x1,y1),(x2,y2),...,(xN,yN)
其中,每个样本点由实例与标记组成,实例
x
i
∈
X
⊆
R
n
x_i \in X \subseteq R^n
xi∈X⊆Rn, 标记
y
i
∈
Y
=
{
−
1
,
+
1
}
y_i\in Y = \{-1, +1\}
yi∈Y={−1,+1}.
X
X
X是实例空间,
Y
Y
Y是标记空间。
AdaBoost算法
输入:训练数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
T={(x_1,y_1), (x_2, y_2),...,(x_N, y_N)}
T=(x1,y1),(x2,y2),...,(xN,yN),其中
x
i
∈
X
⊆
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
x_i \in X \subseteq R^n, y_i\in 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},...,w_{1i},...,w_{1N}), w_{1i} = \frac{1}{N}, i=1, 2,...,N
D1=(w11,...,w1i,...,w1N),w1i=N1,i=1,2,...,N
(2). 对
m
=
1
,
2
,
.
.
.
,
M
.
m=1, 2,...,M.
m=1,2,...,M.
a. 使用具有权值分布
D
m
D_m
Dm的训练数据集学习,得到基本分类器
G
m
(
x
)
:
χ
→
{
−
1
,
+
1
}
G_m(x): \chi \rightarrow \{-1, +1\}
Gm(x):χ→{−1,+1}
b. 计算
G
m
(
x
)
G_m(x)
Gm(x)在训练数据集上的分类误差率
e
m
=
P
(
G
m
(
x
i
)
≠
y
i
)
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
)
e_m = P(G_m(x_i) \not=y_i) = \sum^N_{i=1} w_{mi}I(G_m(x_i) \not= y_i)
em=P(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi)=yi)
c. 计算
G
m
(
x
)
G_m(x)
Gm(x)的系数
α
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
对数为自然对数
d.更新训练数据集的权值分布
D
m
+
1
=
(
w
m
+
1
,
1
,
.
.
.
,
w
m
+
1
,
i
,
.
.
.
,
w
m
+
1
,
N
)
D_{m+1} = (w_{m+1,1}, ...,w_{m+1, i},...,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))
这里,
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=1∑Nwmiexp(−αmyiGm(xi))
它使得
D
m
+
1
称
为
一
个
概
率
分
布
D_{m+1}称为一个概率分布
Dm+1称为一个概率分布
(3)构建基本分类器的线性组合
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
f(x)=\sum_{m=1}^M\alpha_m G_m(x)
f(x)=m=1∑MαmGm(x)
得到最终分类器
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
G(x)=sign(f(x))=sign\Big(\sum_{m=1}^M\alpha_mG_m(x)\Big)
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))
提升树
以决策树为基函数的提升方法称为提升树。提升树采用前向分步算法。首先确定初始提升树
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0,第
m
m
m步的模型是
f
m
(
x
)
=
f
m
−
1
(
x
)
+
T
(
x
;
θ
m
)
f_m(x)=f_{m-1}(x)+T(x;\theta_m)
fm(x)=fm−1(x)+T(x;θm)
其中,
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x)为当前模型,通过经验风险极小化确定下一棵决策树的参数:
θ
m
=
a
r
g
m
i
n
θ
m
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
;
θ
m
)
)
\theta_m = \underset{\theta_m}{argmin}\sum^{N}_{i=1}L(y_i, f_{m-1}(x_i)+T(x_i;\theta_m))
θm=θmargmini=1∑NL(yi,fm−1(xi)+T(xi;θm))
针对不同的提升树学习算法,其主要区别在于使用的损失函数不同。用平方误差损失函数的回归问题,用指数损失函数的分类问题,用一般损失函数的决策问题。
回归问题的提升树算法
已知一个训练数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
2
x
N
,
y
N
)
,
x
i
∈
χ
⊆
R
n
T={(x_1, y_1), (x_2, y_2), ..., (2x_N, y_N)}, x_{i}\in \chi \subseteq R^n
T=(x1,y1),(x2,y2),...,(2xN,yN),xi∈χ⊆Rn
χ
\chi
χ为输入空间,
y
i
∈
Y
⊆
R
y_i \in Y \subseteq R
yi∈Y⊆R,
Y
Y
Y为输出空间。如果将输入空间
χ
\chi
χ划分为
J
J
J个互不相交的区域
R
1
,
R
2
,
.
.
.
,
R
J
R_1, R_2, ..., R_J
R1,R2,...,RJ, 并且在每个区域上确定输出的常量
c
j
c_j
cj, 那么树可表示为
T
(
x
;
θ
)
=
∑
j
=
1
J
c
j
I
(
x
∈
R
j
)
T(x; \theta)=\sum^J_{j=1} c_jI(x\in R_j)
T(x;θ)=j=1∑JcjI(x∈Rj)
其中参数
θ
=
(
R
1
,
c
1
)
,
(
R
2
,
c
2
)
,
.
.
.
,
(
R
j
,
c
j
)
\theta={(R_1, c_1), (R_2, c_2), ..., (R_j, c_j)}
θ=(R1,c1),(R2,c2),...,(Rj,cj), 表示树的区域划分和各区域上的常数,
J
J
J是回归树的复杂度即叶结点个数。
回归问题提升树使用以下前向分步算法:
f
0
(
x
)
=
0
f
m
(
x
)
=
f
m
−
1
(
x
)
+
T
(
x
;
θ
m
)
f
M
=
∑
m
=
1
M
T
(
x
,
θ
m
)
\begin{aligned} & f_0(x) = 0 \\ & f_m(x)=f_{m-1}(x)+T(x;\theta_m) \\ & f_M = \sum^M_{m=1}T(x, \theta_m) \end{aligned}
f0(x)=0fm(x)=fm−1(x)+T(x;θm)fM=m=1∑MT(x,θm)
在前向分布算法的第
m
m
m步,给定当前模型
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x),需求解第
m
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
)
)
\theta_m = \underset{\theta_m}{argmin}\sum^{N}_{i=1}L(y_i, f_{m-1}(x_i)+T(x_i;\theta_m))
θm=θmargmini=1∑NL(yi,fm−1(xi)+T(xi;θm))
当采用平方误差损失函数时,
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
=
[
γ
−
T
(
x
;
θ
m
)
]
2
L(y, f_{m-1}(x)+T(x; \theta_m)) =[y-f_{m-1}(x)-T(x; \theta_m)]^2 =[ \gamma - T(x; \theta_m)]^2
L(y,fm−1(x)+T(x;θm))=[y−fm−1(x)−T(x;θm)]2=[γ−T(x;θm)]2
这里
γ
=
y
−
f
m
−
1
(
x
)
\gamma = y - f_{m-1}(x)
γ=y−fm−1(x)
为当前模型拟合数据的残差,对回归问题放入提升树算法来说,只需简单地拟合当前模型的残差。
梯度提升
当损失函数时平方损失和指数函数时,每一步优化是很简单的。但对一般损失函数而言,优化并不那么容易。此时可以应用梯度提升算法,它是利用最速下降法的近似方法,关键是利用损失函数的负梯度在当前模型的值
−
[
∂
L
(
y
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
m
−
1
(
x
)
-\Big[\frac{\partial L(y, f(x_i))}{\partial f(x_i)}\Big]_{f(x)=f_{m-1}(x)}
−[∂f(xi)∂L(y,f(xi))]f(x)=fm−1(x)
即此时的梯度值作为拟合的残差。
参考:
- 统计学习方法