提升树模型
提升树是以分类数或回归树为基本分类器的提升方法。提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法,以决策树为基函数的提升方法为提升树(boosting tree)。基本分类器
x
<
v
x<v
x<v或
x
>
v
x>v
x>v,可以看作是一个根结点直接连接两个叶结点的简单决策树,也就是单层决策树,称为决策树桩(decision stump)。提升树模型可以表达为决策树的加法模型:
F
m
(
x
)
=
∑
t
=
1
m
f
(
x
;
θ
t
)
F_{m}(\mathbf{x})=\sum_{t=1}^{m}f(\mathbf x;\theta_{t})
Fm(x)=t=1∑mf(x;θt)
其中
f
(
x
;
θ
j
)
f(\mathbf x;\theta_{j})
f(x;θj)为第
j
j
j棵决策树,
θ
j
\theta_{j}
θj为参数。
提升树采用前向分布算法,确定初始提升树
f
0
(
x
)
=
0
f_{0}(\mathbf{x})=0
f0(x)=0,第
m
m
m次提升的模型为:
F
m
(
x
)
=
F
m
−
1
(
x
)
+
f
(
x
;
θ
m
)
F_{m}(\mathbf{x})=F_{m-1}(\mathbf{x})+f(\mathbf{x};\theta_{m})
Fm(x)=Fm−1(x)+f(x;θm)
其中,
F
m
−
1
(
x
)
F_{m-1}(\mathbf x)
Fm−1(x)为前
m
−
1
m-1
m−1个决策树组成的集成分类器,通过最小化经验风险来确定第
m
m
m棵树的参数:
θ
m
=
arg
min
θ
∑
i
=
1
N
L
(
y
i
,
F
m
−
1
(
x
i
)
+
f
(
x
i
;
θ
)
)
\theta_{m}=\arg\min_{\theta}\sum_{i=1}^{N}L(y_{i},F_{m-1}(\mathbf{x}_{i})+f(\mathbf{x}_{i};\theta))
θm=argθmini=1∑NL(yi,Fm−1(xi)+f(xi;θ))
不同问题的提升树算法,主要区别是使用的损失函数不同。对于二分类问题,提升树算法是AdaBoost算法的特殊情况。这里叙述回归问题的提升树。
已知训练集
{
(
x
i
,
y
i
)
}
1
N
\{(\mathbf{x}_{i},y_{i})\}_{1}^{N}
{(xi,yi)}1N,如果将输入空间划分为
J
J
J个不相交的区域
R
1
,
R
2
,
.
.
.
,
R
J
R_{1},R_{2},...,R_{J}
R1,R2,...,RJ,并且每个区域确定输出的常量
c
j
c_{j}
cj,树可表示为:
f
(
x
;
θ
)
=
∑
j
=
1
J
c
j
I
(
x
∈
R
j
)
f(\mathbf{x};\theta)=\sum_{j=1}^{J}c_{j}I(\mathbf{x}\in R_{j})
f(x;θ)=j=1∑JcjI(x∈Rj)
其中,参数
θ
=
{
(
R
j
,
c
j
)
}
1
N
\theta=\{(R_{j},c_{j})\}_{1}^{N}
θ={(Rj,cj)}1N表示树的区域划分和区域的常数值。
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
)
+
f
(
x
;
θ
)
)
=
L
[
y
−
F
m
−
1
(
x
)
−
f
(
x
;
θ
)
]
2
=
[
r
−
f
(
x
;
θ
)
]
2
L(y,F_{m-1}(\mathbf{x})+f(\mathbf{x};\theta))=L[y-F_{m-1}(\mathbf{x})-f(\mathbf{x};\theta)]^{2}=[r-f(\mathbf{x};\theta)]^{2}
L(y,Fm−1(x)+f(x;θ))=L[y−Fm−1(x)−f(x;θ)]2=[r−f(x;θ)]2
r
=
y
−
F
m
−
1
(
x
)
r=y-F_{m-1}(\mathbf{x})
r=y−Fm−1(x)是当前模型拟合数据的残差(residual)。所以,回归问题的提升树算法只需要拟合当前模型的残差。
回归问题的提升树算法:
输入:训练数据集
{
(
x
i
,
y
i
)
}
1
N
\{(\mathbf{x}_{i},y_{i})\}_{1}^{N}
{(xi,yi)}1N
输出:提升树
F
M
(
x
)
F_{M}(\mathbf{x})
FM(x)
初始化
f
0
(
x
)
=
0
f_{0}(\mathbf{x})=0
f0(x)=0
对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M:
---------计算残差
r
m
i
=
y
i
−
F
m
−
1
(
x
i
)
,
i
=
1
,
2
,
.
.
.
,
N
r_{mi}=y_{i}-F_{m-1}(\mathbf x_{i}),i=1,2,...,N
rmi=yi−Fm−1(xi),i=1,2,...,N
---------拟合残差学习一个回归树,得到回归树
f
(
x
;
θ
m
)
f(\mathbf{x;\theta_{m}})
f(x;θm)
---------更新
F
m
(
x
)
=
F
m
−
1
(
x
)
+
f
(
x
;
θ
m
)
F_{m}(\mathbf{x})=F_{m-1}(\mathbf{x})+f(\mathbf{x;\theta_{m}})
Fm(x)=Fm−1(x)+f(x;θm)
最终得到的回归提升树:
F
M
(
x
)
=
∑
m
=
1
M
f
(
x
;
θ
m
)
F_{M}(\mathbf{x})=\sum_{m=1}^{M}f(\mathbf{x};\theta_{m})
FM(x)=m=1∑Mf(x;θm)
例子: 学习这个回归问题的提升树模型,考虑只用树桩做为基函数。
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
y | 5.56 | 5.70 | 5.91 | 6.40 | 6.80 | 7.05 | 8.90 | 8.70 | 9.00 | 9.05 |
第一步求回归树
f
1
(
x
)
f_{1}(x)
f1(x),通过以下优化问题:
m
(
s
)
=
min
c
1
∑
x
i
∈
R
1
(
y
i
−
c
1
)
2
+
min
c
2
∑
x
i
∈
R
2
(
y
i
−
c
2
)
2
m(s)=\min_{c_{1}}\sum_{x_{i}\in R_{1}}(y_{i}-c_{1})^{2}+\min_{c_{2}}\sum_{x_{i}\in R_{2}}(y_{i}-c_{2})^{2}
m(s)=c1minxi∈R1∑(yi−c1)2+c2minxi∈R2∑(yi−c2)2
求解训练数据的切分点
s
s
s:
R
1
=
{
x
∣
x
≤
s
}
,
R
2
=
{
x
∣
x
>
s
}
R_{1}=\{x|x\leq s\}, R_{2}=\{x|x>s\}
R1={x∣x≤s},R2={x∣x>s}。容易求得在
R
1
,
R
2
R_{1},R_{2}
R1,R2内部使平方误差达到最小值的
c
1
,
c
2
c_{1},c_{2}
c1,c2为:
c
1
=
1
N
1
∑
x
i
∈
R
1
y
i
,
c
2
=
1
N
2
∑
x
i
∈
R
2
y
i
c_{1}=\frac{1}{N_{1}}\sum_{x_{i}\in R_{1}}y_{i},c_{2}=\frac{1}{N_{2}}\sum_{x_{i}\in R_{2}}y_{i}
c1=N11xi∈R1∑yi,c2=N21xi∈R2∑yi
根据所给的数据,考虑如下的切分点:
1.5
,
2.5
,
3.5
,
4.5
,
5.5
,
6.5
,
7.5
,
8.5
,
9.5
1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5
1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5
例如:当
s
=
1.5
时
,
R
1
=
{
1
}
,
R
2
=
{
2
,
3
,
.
.
.
,
10
}
,
c
1
=
5.56
,
c
2
=
7.50
,
m
(
s
)
=
15.72
s=1.5时,R_{1}=\{1\},R_{2}=\{2,3,...,10\},c_{1}=5.56,c_{2}=7.50,m(s)=15.72
s=1.5时,R1={1},R2={2,3,...,10},c1=5.56,c2=7.50,m(s)=15.72
现将
s
s
s及
m
(
s
)
m(s)
m(s)的计算结果列表如下:
s | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
---|---|---|---|---|---|---|---|---|---|
m(s) | 15.72 | 12.07 | 8.36 | 5.78 | 3.91 | 1.93 | 8.01 | 11.73 | 15.74 |
由上表可知,当
s
=
6.5
s=6.5
s=6.5时,
m
(
s
)
m(s)
m(s)达到最小值,此时
R
1
=
{
1
,
2
,
.
.
.
,
6
}
,
R
2
=
{
7
,
8
,
9
,
10
}
,
c
1
=
6.24
,
c
2
=
8.91
R_{1}=\{1,2,...,6\},R_{2}=\{7,8,9,10\},c_{1}=6.24,c_{2}=8.91
R1={1,2,...,6},R2={7,8,9,10},c1=6.24,c2=8.91,所以回归树
f
1
(
x
)
=
{
6.24
,
x
<
6.5
8.91
,
x
≥
6.5
f_{1}(x)=\left\{\begin{matrix} 6.24,x<6.5\\ 8.91,x\geq 6.5 \end{matrix}\right.
f1(x)={6.24,x<6.58.91,x≥6.5
用
f
1
(
x
)
f_{1}(x)
f1(x)拟合训练数据的残差如下表所示:
r
2
i
=
y
i
−
f
1
(
x
i
)
r_{2i}=y_{i}-f_{1}(x_{i})
r2i=yi−f1(xi)
x x x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
r 2 i r_{2i} r2i | -0.68 | -0.54 | -0.33 | 0.16 | 0.56 | 0.81 | -0.01 | -0.21 | 0.09 | 0.14 |
用
F
1
(
x
)
F_{1}(x)
F1(x)拟合训练数据的平方损失误差:
L
(
y
,
F
1
(
x
)
)
=
∑
i
=
1
10
(
y
i
−
F
1
(
x
i
)
)
2
=
1.93
L(y,F_{1}(x))=\sum_{i=1}^{10}(y_{i}-F_{1}(x_{i}))^{2}=1.93
L(y,F1(x))=i=1∑10(yi−F1(xi))2=1.93
采用与上面相同的方法拟合残差数据:
f
2
(
x
)
=
{
−
0.52
,
x
<
3.5
0.22
,
x
≥
3.5
f_{2}(x)=\left\{\begin{matrix} -0.52, x<3.5\\ 0.22, x \geq 3.5 \end{matrix}\right.
f2(x)={−0.52,x<3.50.22,x≥3.5
依次类推可得:
f
3
(
x
)
=
{
0.15
,
x
<
6.5
−
0.22
,
x
≥
6.5
,
f
4
(
x
)
=
{
−
0.16
,
x
<
4.5
0.11
,
x
≥
4.5
f_{3}(x)=\left\{\begin{matrix} 0.15, x<6.5\\ -0.22, x \geq 6.5 \end{matrix}\right.,f_{4}(x)=\left\{\begin{matrix} -0.16, x<4.5\\ 0.11, x \geq 4.5 \end{matrix}\right.
f3(x)={0.15,x<6.5−0.22,x≥6.5,f4(x)={−0.16,x<4.50.11,x≥4.5
f
5
(
x
)
=
{
0.07
,
x
<
6.5
−
0.11
,
x
≥
6.5
,
f
6
(
x
)
=
{
−
0.15
,
x
<
2.5
0.04
,
x
≥
2.5
f_{5}(x)=\left\{\begin{matrix} 0.07, x<6.5\\ -0.11, x \geq 6.5 \end{matrix}\right.,f_{6}(x)=\left\{\begin{matrix} -0.15, x<2.5\\ 0.04, x \geq 2.5 \end{matrix}\right.
f5(x)={0.07,x<6.5−0.11,x≥6.5,f6(x)={−0.15,x<2.50.04,x≥2.5
F
6
(
x
)
=
F
5
(
x
)
+
f
6
(
x
)
=
f
1
(
x
)
+
f
2
(
x
)
+
.
.
.
+
f
6
(
x
)
=
{
5.63
,
x
<
2.5
5.82
,
2.5
≤
x
<
3.5
6.56
,
3.5
≤
x
<
4.5
6.83
,
4.5
≤
x
<
6.5
8.95
,
x
≥
6.5
F_{6}(x)=F_{5}(x)+f_{6}(x)=f_{1}(x)+f_{2}(x)+...+f_{6}(x)=\left\{\begin{matrix} 5.63,x<2.5\\ 5.82,2.5\leq x <3.5\\ 6.56,3.5\leq x <4.5\\ 6.83,4.5\leq x <6.5\\ 8.95,x \geq 6.5 \end{matrix}\right.
F6(x)=F5(x)+f6(x)=f1(x)+f2(x)+...+f6(x)=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧5.63,x<2.55.82,2.5≤x<3.56.56,3.5≤x<4.56.83,4.5≤x<6.58.95,x≥6.5
用
F
6
(
x
)
F_{6}(x)
F6(x)拟合训练数据的平方损失函数误差是:
L
(
y
,
F
6
(
x
)
)
=
∑
i
=
1
10
L
(
y
i
,
F
6
(
x
i
)
)
=
0.17
L(y,F_{6}(x))=\sum_{i=1}^{10}L(y_{i},F_{6}(x_{i}))=0.17
L(y,F6(x))=i=1∑10L(yi,F6(xi))=0.17
假设此时已满足误差要求,那么
F
6
(
x
)
F_{6}(x)
F6(x)就是所求的提升树。
梯度提升
提升树利用加法模型和前向分步算法实现学习的优化过程。当损失函数为平方损失函数和指数损失函数时,每一步的优化很容易实现,但对一般的损失函数而言,优化困难。Freidman提出了梯度提升方法(gradient boosting),利用损失函数的负梯度在当前模型的值:
−
[
∂
L
(
y
i
,
F
(
x
i
)
)
∂
F
(
x
i
)
]
F
(
x
)
=
F
m
−
1
(
x
)
-[\frac{\partial{L(y_{i},F(\mathbf{x}_{i}))}}{\partial{F({\mathbf{x}_{i}})}}]_{F({\mathbf{x}})=F_{m-1}(\mathbf x)}
−[∂F(xi)∂L(yi,F(xi))]F(x)=Fm−1(x)
作为回归问题提升树中残差的近似值来优化。
梯度提升的一般框架
对于第
m
m
m步,
(
β
m
,
a
m
)
=
arg
min
β
,
a
∑
i
=
1
N
L
(
y
i
,
F
m
−
1
(
x
i
)
+
β
h
(
x
i
;
a
)
)
(\beta_{m},a_{m})=\arg \min_{\beta,a}\sum_{i=1}^{N}L(y_{i},F_{m-1}(\mathbf{x}_{i})+\beta h(\mathbf{x}_{i};a))
(βm,am)=argβ,amini=1∑NL(yi,Fm−1(xi)+βh(xi;a))
上述的误差可能很难去直接优化,不妨先通用的求解梯度:
−
g
m
(
x
i
)
=
−
[
∂
L
(
y
i
,
F
(
x
i
)
)
∂
F
(
x
i
)
]
F
(
x
)
=
F
m
−
1
(
x
)
-g_{m}(\mathbf{x}_{i})=-[\frac{\partial{L(y_{i},F(\mathbf{x}_{i}))}}{\partial{F({\mathbf{x}_{i}})}}]_{F({\mathbf{x}})=F_{m-1}(\mathbf x)}
−gm(xi)=−[∂F(xi)∂L(yi,F(xi))]F(x)=Fm−1(x)
我们先把
F
m
−
1
(
x
i
)
F_{m-1}({\mathbf{x}_{i}})
Fm−1(xi)看做一个整体,也就是一个参数。求解梯度后,我们通常会这样更新:
F
m
(
x
i
)
=
F
m
−
1
(
x
i
)
−
g
m
(
x
i
)
F_{m}({\mathbf{x}_{i}})=F_{m-1}({\mathbf{x}_{i}})-g_{m}(\mathbf{x}_{i})
Fm(xi)=Fm−1(xi)−gm(xi)
此时,
F
m
(
x
i
)
F_{m}({\mathbf{x}_{i}})
Fm(xi)就要比
F
m
−
1
(
x
i
)
F_{m-1}({\mathbf{x}_{i}})
Fm−1(xi)更优。但是我们的目的是要得到如下而不是更新
F
(
x
i
)
F({\mathbf{x}_{i}})
F(xi):
F
m
(
x
i
)
=
F
m
−
1
(
x
i
)
+
β
h
(
x
i
;
a
)
F_{m}({\mathbf{x}_{i}})=F_{m-1}({\mathbf{x}_{i}})+\beta h(\mathbf{x}_{i};a)
Fm(xi)=Fm−1(xi)+βh(xi;a)
所以新组合得到的分类器就要去拟合负梯度:
a
m
=
arg
min
a
,
β
∑
i
=
1
N
[
−
g
m
(
x
i
)
−
β
h
(
x
i
;
a
)
]
2
a_{m}=\arg \min_{a,\beta}\sum_{i=1}^{N}[-g_{m}(\mathbf{x}_{i})-\beta h(\mathbf{x}_{i};a)]^{2}
am=arga,βmini=1∑N[−gm(xi)−βh(xi;a)]2
β
m
\beta_{m}
βm无需求解的原因是下面求解的
ρ
m
\rho_{m}
ρm可能会比其更优:
ρ
m
=
arg
min
ρ
∑
i
=
1
N
L
(
y
i
,
F
m
−
1
(
x
i
)
+
ρ
h
(
x
i
;
a
m
)
)
\rho_{m}=\arg\min_{\rho}\sum_{i=1}^{N}L(y_{i},F_{m-1}(\mathbf{x}_{i})+\rho h(\mathbf{x}_{i};a_{m}))
ρm=argρmini=1∑NL(yi,Fm−1(xi)+ρh(xi;am))
更新组合分类器:
F
m
(
x
i
)
=
F
m
−
1
(
x
i
)
+
ρ
m
h
(
x
i
;
a
m
)
)
F_{m}(\mathbf{x}_{i})=F_{m-1}(\mathbf{x}_{i})+\rho_{m} h(\mathbf{x}_{i};a_{m}))
Fm(xi)=Fm−1(xi)+ρmh(xi;am))
框架伪代码: