一. 提升树 (Boosting Tree)
提升树:以决策树为基函数的提升方法
模型:决策树的加法模型
策略:最小化损失函数(分类问题:指数函数;回归问题:平方误差)
算法: 前向分步
不同问题的提升树学习算法,主要区别在于使用的损失函数不同,包括
用指数损失函数的二分类问题
用平方误差损失函数的回归问题
对于这两种损失函数而言,前向分步算法中每一步的优化是很简单的,但对于一般的损失函数而言,并不容易。
因此后面才有GBDT 梯度提升树的提出
二分类问题的提升树(指数损失函数)
对于二分类问题,提升树算法只需要将AdaBoost中的基分类器变为二类分类树。
回归问题的提升树(平方误差损失函数)
提升树模型
f
M
(
x
)
=
∑
m
=
1
M
T
(
x
;
Θ
m
)
f_M(x) = \sum_{m=1}^MT(x; \Theta_m)
fM(x)=m=1∑MT(x;Θm)
T
(
x
;
Θ
m
)
T(x; \Theta_m)
T(x;Θm)表示决策树,
Θ
m
\Theta_m
Θm为决策树参数,M为树的个数。
前向分步算法
f
0
(
x
)
=
0
f_0(x) = 0
f0(x)=0
f
m
(
x
)
=
f
m
−
1
(
x
)
+
T
(
x
;
Θ
m
)
,
m
=
1
,
2
,
,
.
.
M
f_m(x) = f_{m-1}(x)+T(x; \Theta_m), m =1,2,,..M
fm(x)=fm−1(x)+T(x;Θm),m=1,2,,..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} = \mathop{\arg\min}_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))
Θ^m=argminΘmi=1∑NL(yi,fm−1(xi)+T(xi;Θm))
得到
Θ
^
m
\hat{\Theta}_{m}
Θ^m,即第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
)
)
L(y,f_{m-1}(x)+T(x;\Theta_m))
L(y,fm−1(x)+T(x;Θm))
=
[
y
−
f
m
−
1
(
x
)
−
T
(
x
;
Θ
m
)
)
]
2
=[y-f_{m-1}(x)-T(x;\Theta_m))]^2
=[y−fm−1(x)−T(x;Θm))]2
=
[
r
−
T
(
x
;
Θ
m
)
)
]
2
=[r-T(x;\Theta_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)
梯度提升树(一般的损失函数)
1. 梯度下降
对于优化问题
m
i
n
f
(
w
)
minf(w)
minf(w)
- 选初值 w 0 w_0 w0
- 负梯度方向下降最快 : d i = − ∂ f ( w ) ∂ w ∣ w i d_i = -\left.\frac{\partial f(w)}{\partial w}\right|_{w_i} di=−∂w∂f(w)∣∣∣wi
- 更新公式 : w i + 1 = w i + η ∗ d i w_{i+1} = w_i+\eta*d_i wi+1=wi+η∗di ,步长 η \eta η
- 设经过M次迭代,得到最优解
w
∗
w^*
w∗ , 设
w
0
=
η
∗
d
0
w_0 = \eta*d_0
w0=η∗d0。
w ∗ = ∑ i = 0 M η i d i w^* = \sum_{i=0}^M\eta_id_i w∗=i=0∑Mηidi
2.函数空间的梯度下降
对于损失函数,
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x)),希望求得最优的函数
f
∗
(
x
)
f^*(x)
f∗(x)。
把
f
(
x
)
f(x)
f(x)看作整体(和上面的
w
w
w一样)。
- 初始 f 0 ( x ) = 0 f_0(x) = 0 f0(x)=0
- 负梯度 : d i = − ∂ L ( y , f ( x ) ) ∂ f ( x ) ∣ f i ( x ) d_i = -\left.\frac{\partial L(y,f(x))}{\partial f(x)}\right|_{f_i(x)} di=−∂f(x)∂L(y,f(x))∣∣∣fi(x)
- 设经过M次迭代
m
=
1
,
2
,
.
.
.
M
m=1,2,...M
m=1,2,...M
f m ( x ) = f m − 1 ( x ) − ∂ L ( y , f ( x ) ) ∂ f ( x ) ∣ f m − 1 ( x ) f_m(x) = f_{m-1}(x) -\left.\frac{\partial L(y,f(x))}{\partial f(x)}\right|_{f_{m-1}(x)} fm(x)=fm−1(x)−∂f(x)∂L(y,f(x))∣∣∣∣fm−1(x)
f ∗ ( x ) = ∑ i = 0 M f i ( x ) f^*(x) = \sum_{i=0}^Mf_i(x) f∗(x)=i=0∑Mfi(x)
3.梯度提升树(Gradient Boosting Decison Tree)
把2中的
f
(
x
)
f(x)
f(x)用决策树
T
(
x
;
Θ
m
)
T(x; \Theta_m)
T(x;Θm)替换,就得到GBDT算法。
可以看到GBDT用损失函数的负梯度在当前模型的值,去拟合下一个决策树
GBDT的损失函数定义为平方误差损失函数就得到上面的回归问题的提升树
L
(
y
,
f
(
x
)
)
=
1
2
(
f
(
x
)
−
y
)
2
L(y,f(x)) = \frac{1}{2}(f(x)-y)^2
L(y,f(x))=21(f(x)−y)2
d
i
=
−
∂
L
(
y
,
f
(
x
)
)
∂
f
(
x
)
∣
f
m
−
1
(
x
)
=
y
−
f
m
−
1
(
x
)
d_i = -\left.\frac{\partial L(y,f(x))}{\partial f(x)}\right|_{f_{m-1}(x)}=y-f_{m-1}(x)
di=−∂f(x)∂L(y,f(x))∣∣∣∣fm−1(x)=y−fm−1(x)
损失函数的负梯度在当前模型的值是残差,用残差拟合回归树。
参考文献
【1】http://blog.csdn.net/google19890102/article/details/51746402
【2】https://www.cnblogs.com/pinard/p/6140514.html