提升树(boosting tree)是以分类树或回归树为基本分类器的提升方法。
提升树模型
提升方法是采用加法模型与前向分步算法。以决策树为基函数的提升方法称为提升树。先来回顾一下加法模型算法:
输入:训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) , x i ∈ X ⊆ R n , y i ∈ { − 1 , 1 } T={(x_1,y_1),(x_2,y_2),...,(x_N, y_N)}, x_i \in \mathcal X \sube R^n, y_i\in \{-1, 1\} T=(x1,y1),(x2,y2),...,(xN,yN),xi∈X⊆Rn,yi∈{−1,1}, 损失函数 L ( y , f ( x ) ) L(y, f(x)) L(y,f(x)); 基函数集合 { b ( x ; γ ) } \{b(x;\gamma)\} {b(x;γ)}
输出:加法模型 f ( x ) f(x) f(x)
步骤:
- 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
- 对 m = 1 , 2 , … , M m=1,2,\dots,M m=1,2,…,M,极小化损失函数
( β m , γ m ) = arg min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=\arg\min \limits_ {\beta,\gamma}\sum_{i=1}^NL(y_i, f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(xi;γ))
- 更新
f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta _mb(x;\gamma_m) fm(x)=fm−1(x)+βmb(x;γm)
- 得到加法模型
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)
所以,提升树模型可以表示为决策树的加法模型:
f
M
(
x
)
=
∑
m
=
1
M
T
(
x
;
Θ
m
)
f_M(x) = \sum_{m=1}^M T(x; \Theta_m)
fM(x)=m=1∑MT(x;Θm)
其中,$ T(x; \Theta_m)$ 表示决策树,
Θ
m
\Theta_m
Θm 是决策树的参数,M 为决策树的个数。
提升树算法
提升树采用前向分步算法。首先确定初始提升树
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0,第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)$ 为当前模型,通过经验风险极小化确定下一棵决策树的参数
Θ
m
\Theta_m
Θm:
Θ
^
m
=
arg
min
Θ
m
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
;
Θ
m
)
)
\hat \Theta_m = \arg \min \limits_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))
Θ^m=argΘmmini=1∑NL(yi,fm−1(xi)+T(xi;Θm))
回归提升树与分类提升树学习算法的区别在于损失函数的不同:
(1)回归问题采用平方误差损失函数
(2)分类问题采用指数损失函数
给定训练集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
,
x
i
∈
X
⊆
R
n
,
,
y
i
∈
Y
∈
⊆
R
T={(x_1,y_1),(x_2,y_2),...,(x_N, y_N)}, x_i \in \mathcal X \sube R^n,, y_i\in \mathcal Y \in \sube R
T=(x1,y1),(x2,y2),...,(xN,yN),xi∈X⊆Rn,,yi∈Y∈⊆R ,如果将输入空间
X
\mathcal X
X 划分为
J
J
J 个不相交的区域
R
1
,
R
2
…
,
R
J
R_1,R_2\ldots,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=1}^J c_j I(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),\ldots,(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
)
,
m
=
1
,
2
,
…
,
M
f
M
(
x
)
=
∑
m
=
1
M
T
(
x
;
Θ
m
)
\begin{aligned} &f_0(x)=0\\ &f_m(x) = f_{m-1}(x)+T(x;\Theta_m),\quad m=1,2,\ldots,M\\ &f_M(x) = \sum_{m=1}^M T(x;\Theta_m) \end{aligned}
f0(x)=0fm(x)=fm−1(x)+T(x;Θm),m=1,2,…,MfM(x)=m=1∑MT(x;Θm)
在前向分步算法的第m步,给定当前模型
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x),需求解:
Θ
^
m
=
arg
min
Θ
m
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
;
Θ
m
)
)
\hat \Theta_m = \arg \min \limits_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))
Θ^m=argΘmmini=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
=
[
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 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) , x i ∈ X ⊆ R n , y i ∈ Y ∈ ⊆ R T={(x_1,y_1),(x_2,y_2),...,(x_N, y_N)}, x_i \in \mathcal X \sube R^n, y_i\in \mathcal Y \in \sube R T=(x1,y1),(x2,y2),...,(xN,yN),xi∈X⊆Rn,yi∈Y∈⊆R
输出:提升树 f M ( x ) f_M(x) fM(x)
步骤:
初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
对 m = 1 , 2 , … , M m=1,2,\dots,M m=1,2,…,M
(a)计算残差
r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , … , N r_{mi}=y_i-f_{m-1}(x_i), i=1,2,\dots,N rmi=yi−fm−1(xi),i=1,2,…,N
(b)拟合残差 r m i r_{mi} rmi学习一个回归树,得到 T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)(c)更新 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 ( x ) = f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f(x)=f_M(x)=\sum_{m=1}^MT(x;\Theta_m) f(x)=fM(x)=m=1∑MT(x;Θm)