Boosting算法的思想和随机森林的思想是不同的,随机森林中的每棵树都是一个强分类器(树的深度比较深),那么这样偏差就会小得多,方差就会大的多,为了降低方差,随机森林设计了多棵树,每棵树的样本都是通过重抽样的方式获得,这样相当于综合了数据总体的多个样本进行训练,可以有效的降低方差,这样在测试集中才可以得到较好的效果。Boosting的思想是设计多个弱分类器,弱分类的特点就在于偏差过大,因此需要后续的分类器针对前面的分类器进行修正,将偏差变小。
**1.模型的描述 **
假设我们希望预测的变量为
Y
Y
Y,相关变量为
X
X
X,我们希望得到一个模型
F
(
X
)
F(X)
F(X),对
Y
Y
Y进行预测,即
Y
^
=
F
(
X
)
\hat{Y}=F(X)
Y^=F(X)
同时分类问题最终是需要得到一个类别,因此
F
(
X
)
=
s
i
g
n
(
f
(
X
)
)
F(X)=sign(f(X))
F(X)=sign(f(X))
针对回归问题,我们直接使用
F
(
X
)
=
f
(
X
)
F(X)=f(X)
F(X)=f(X)
模型的训练都需要有一个Loss function 用于衡量
Y
^
\hat{Y}
Y^和
Y
Y
Y之间的差异,模型训练的目的就在于最小化这个差异 ,即
min
f
L
(
Y
,
f
(
X
)
)
\min_{f} \quad L(Y,f(X))
fminL(Y,f(X))
写成带有样本的形式,即
min
f
∑
i
L
(
Y
i
,
f
(
X
i
)
)
(1)
\min_{f} \quad \sum_{i}L(Y_{i},f(X_{i})) \tag{1}
fmini∑L(Yi,f(Xi))(1)
Boosting算法的目的就是为了寻找M个的弱分类器
f
1
,
.
.
.
f
M
{f_1,...f_M}
f1,...fM作用在样本上,然后将所有的弱分类的结果组合起来,也就是
f
(
x
)
=
∑
m
=
1
M
α
m
f
m
(
X
)
f(x)=\sum_{m=1}^M \alpha_m f_m(X)
f(x)=m=1∑Mαmfm(X)
于是公式(1)变成
min
α
m
,
f
m
∑
i
L
(
Y
i
,
∑
m
=
1
M
α
m
f
m
(
X
)
)
\min_{\alpha_m,f_m} \quad \sum_iL(Y_i,\sum_{m=1}^M\alpha_mf_m(X))
αm,fmmini∑L(Yi,m=1∑Mαmfm(X))
采用如下的算法进行求解
A l g o r i t h m 1 Algorithm 1 Algorithm1
- 令 f 0 ( X ) = 0 f_{0}(X)=0 f0(X)=0
- f o r m = 1 , . . . M for \quad m=1,...M form=1,...M
- { α m , γ m } = a r g m i n α , γ ∑ i L ( Y i , f m − 1 ( X i ) + α G ( X i ; γ ) ) \{\alpha_m,\gamma_m\}=argmin_{\alpha,\gamma} \sum_i L(Y_i,f_{m-1}(X_i)+\alpha G(X_i;\gamma)) {αm,γm}=argminα,γ∑iL(Yi,fm−1(Xi)+αG(Xi;γ))
- 令 f m ( X ) = f m − 1 ( X ) + α m G ( X ; γ m ) f_m(X)=f_{m-1}(X)+\alpha_mG(X;\gamma_m) fm(X)=fm−1(X)+αmG(X;γm)
- e n d f o r end \quad for endfor
最终
F
(
X
)
=
s
i
g
n
(
f
M
(
X
)
)
F(X)=sign(f_M(X))
F(X)=sign(fM(X)),通过
f
M
f_M
fM的正负号来判断是否是正例,还是负例。
2.Loss function的选择
针对回归问题来说,我们容易想到使用均方误差作为损失函数,即
L
(
Y
,
f
(
X
)
)
=
(
Y
−
f
(
X
)
)
2
L(Y,f(X))=(Y-f(X))^2
L(Y,f(X))=(Y−f(X))2
针对分类问题,我们令
Y
∈
{
−
1
,
1
}
Y \in \{-1,1\}
Y∈{−1,1},我们首先想到的是误判率作为损失函数 , 即
L
(
Y
,
f
(
X
)
)
=
I
(
Y
≠
s
i
g
n
(
f
(
X
)
)
)
L(Y,f(X))=I(Y \not=sign(f(X)))
L(Y,f(X))=I(Y=sign(f(X)))
但是通常不使用误判率作为损失函数.
那么针对分类问题的话,使用如下两种损失函数
L
(
Y
,
f
(
X
)
)
=
e
x
p
(
−
Y
f
(
X
)
)
L(Y,f(X))=exp(-Yf(X))
L(Y,f(X))=exp(−Yf(X))
L
(
Y
,
f
(
X
)
)
=
l
o
g
(
1
+
e
−
2
Y
f
(
X
)
)
L(Y,f(X))=log(1+e^{-2Yf(X)})
L(Y,f(X))=log(1+e−2Yf(X))
第一个表示指数型损失函数,第二个表示二项似然损失函数
第一个指数型损失函数到底表示什么意思 ???我们通过如下的推导过程来说明
我们的目的是最小化损失函数,即
min
f
(
X
)
E
Y
∣
X
(
e
−
Y
f
(
X
)
)
(3)
\min_{f(X)}E_{Y|X}(e^{-Yf(X)}) \tag{3}
f(X)minEY∣X(e−Yf(X))(3)
我们用
P
(
Y
=
1
∣
X
)
P(Y=1|X)
P(Y=1∣X)表示Y取1的概率,
P
(
Y
=
−
1
∣
X
)
P(Y=-1|X)
P(Y=−1∣X)表示Y取-1的概率 ,那么(3)等价于
min
f
(
X
)
P
(
Y
=
1
∣
X
)
e
−
f
(
X
)
+
P
(
Y
=
−
1
∣
X
)
e
f
(
X
)
\min_{f(X)} P(Y=1|X)e^{-f(X)}+P(Y=-1|X)e^{f(X)}
f(X)minP(Y=1∣X)e−f(X)+P(Y=−1∣X)ef(X)
从而可以求解出
f
∗
(
X
)
=
1
2
l
o
g
P
(
Y
=
1
∣
X
)
P
(
Y
=
−
1
∣
X
)
f^*(X)=\frac{1}{2} log \frac {P(Y=1|X)} {P(Y=-1|X)}
f∗(X)=21logP(Y=−1∣X)P(Y=1∣X)
所以我们最终是针对
P
(
Y
=
1
∣
X
)
P(Y=1|X)
P(Y=1∣X)的log-odds的估计,也就是说如果
f
∗
(
X
)
>
0
f^*(X)>0
f∗(X)>0的话,即
P
(
Y
=
1
∣
X
)
>
P
(
Y
=
−
1
∣
X
)
P(Y=1|X)>P(Y=-1|X)
P(Y=1∣X)>P(Y=−1∣X)
我们预测为正例,否则预测为负例。
其实最开始我们的目的就在于解决
P
(
Y
=
1
∣
X
)
P(Y=1|X)
P(Y=1∣X)和
P
(
Y
=
−
1
∣
X
)
P(Y=-1|X)
P(Y=−1∣X)谁大谁小的问题,我们需要一个对log-odds的估计
第二个二项似然损失函数又是如何来的????
我们假设
p
(
X
)
=
P
(
Y
=
1
∣
X
)
=
1
1
+
e
−
2
f
(
X
)
p(X)=P(Y=1|X)=\frac{1} {1+e^{-2f(X)}}
p(X)=P(Y=1∣X)=1+e−2f(X)1
然后我们令
Y
′
=
(
Y
+
1
)
/
2
Y'=(Y+1)/2
Y′=(Y+1)/2 ,那么二项负似然损失函数为
L
(
Y
,
p
(
X
)
)
=
−
(
Y
′
l
o
g
p
(
X
)
+
(
1
−
Y
′
)
l
o
g
(
1
−
p
(
X
)
)
)
L(Y,p(X))=-(Y'log p(X)+(1-Y')log(1-p(X)))
L(Y,p(X))=−(Y′logp(X)+(1−Y′)log(1−p(X)))
等价的也就是
l
o
g
(
1
+
e
−
2
Y
f
(
X
)
)
log(1+e^{-2Yf(X)})
log(1+e−2Yf(X))
其实这两个损失函数都是在对P(Y=1|X)的log-odds进行估计,从而选择概率大的那个类为预测类。
那么是否可以使用均方误差作为分类问题的损失函数, 和指数型损失函数一样,我们首先看一下最小化均方误差函数等价于对哪个值的估计
f
∗
(
X
)
=
a
r
g
min
f
(
X
)
E
Y
∣
X
(
Y
−
f
(
X
)
)
2
=
E
(
Y
∣
X
)
=
2
P
(
Y
=
1
∣
X
)
−
1
f^*(X)=arg\min_{f(X)}E_{Y|X}(Y-f(X))^2=E(Y|X)=2P(Y=1|X)-1
f∗(X)=argf(X)minEY∣X(Y−f(X))2=E(Y∣X)=2P(Y=1∣X)−1
然后通过
f
∗
(
X
)
f^*(X)
f∗(X)的正负号进行判断是正例还是负例.如果YF(X)>0 ,也就是准确预测出类别,同时F(X)越大,对应的误差应该越小,但是均方误差却是越大的。这便是均方误差不适于用作分类的loss function。
指数型损失函数和二项负似然函数便是随着YF(X)的增大而减小。
如同回归中均方误差和绝对值误差的区别,即绝对值误差更加稳健,受离群点的影响较小,二项负似然损失同样受离群点的影响较小。而指数型损失函数由于当YF(X)<0时是指数型惩罚,因此受到离群点的影响更大。
弱分类器的选择(boosted Tree)
通常情况下,我们会使用决策树作为弱分类器,原因是决策树便于实现,能够灵活的处理不同类型的数据。(数值型数据,符号型数据)。那么首先我们需要确认使用决策树需要哪些参数。决策树的本质是将自变量空间划分成
K
K
K不相交的区块
R
j
(
j
∈
1
,
.
.
.
K
)
R_j(j \in 1,...K)
Rj(j∈1,...K),然后在每个区块中给定一个值
γ
j
(
j
∈
1
,
.
.
.
K
)
\gamma_j(j \in 1,...K)
γj(j∈1,...K),如果一条记录落入改区块中,那么它的取值就是
γ
j
\gamma_j
γj,我们把决策树弱分类器记为
T
(
X
;
Θ
)
T(X;\Theta)
T(X;Θ)
其中
Θ
=
R
j
,
γ
j
,
j
∈
{
1
,
2...
,
K
}
\Theta={R_j,\gamma_j} ,j \in \{1,2...,K\}
Θ=Rj,γj,j∈{1,2...,K}
那么根据algorithm 1,我们需要求解
a
r
g
min
Θ
∑
i
L
(
Y
i
,
f
m
−
1
(
X
i
)
+
T
m
(
X
i
;
Θ
)
)
(4)
arg \min_{\Theta} \sum_i L(Y_i,f_{m-1}(X_i)+T_m(X_i;\Theta)) \tag 4
argΘmini∑L(Yi,fm−1(Xi)+Tm(Xi;Θ))(4)
根据不同的损失函数,有不同的求解方法。
1.均方误差
公式(4)将会转换成
a
r
g
min
Θ
∑
i
(
Y
i
−
f
m
−
1
(
X
i
)
−
T
m
(
X
i
;
Θ
)
)
)
2
arg \min_{\Theta} \sum_i (Y_i-f_{m-1}(X_i)-T_m(X_i;\Theta)))^2
argΘmini∑(Yi−fm−1(Xi)−Tm(Xi;Θ)))2
那么这就相当于拟合一棵决策树,目标值为
Y
i
−
f
m
−
1
(
X
i
)
Y_i-f_{m-1}(X_i)
Yi−fm−1(Xi),这是比较容易实现的
2.指数型损失函数
公式(4)将会转换成
a
r
g
min
Θ
∑
i
exp
(
−
Y
i
∗
(
f
m
−
1
(
X
i
)
+
T
m
(
X
i
;
Θ
)
)
)
arg \min_{\Theta} \sum_i \exp(-Y_i*(f_{m-1}(X_i)+T_m(X_i;\Theta)))
argΘmini∑exp(−Yi∗(fm−1(Xi)+Tm(Xi;Θ)))
也就是
a
r
g
min
Θ
∑
i
exp
(
−
Y
i
f
m
−
1
(
X
i
)
)
exp
(
−
Y
i
T
m
(
X
i
;
Θ
)
)
)
arg \min_{\Theta} \sum_i \exp(-Y_if_{m-1}(X_i))\exp(-Y_iT_m(X_i;\Theta)))
argΘmini∑exp(−Yifm−1(Xi))exp(−YiTm(Xi;Θ)))
这个相当于拟合一个加权的决策树,目标值为
Y
i
Y_i
Yi,样本中的每条记录权重为
exp
(
−
Y
i
f
m
−
1
(
X
i
)
)
\exp(-Y_if_{m-1}(X_i))
exp(−Yifm−1(Xi))
这个也是容易实现的
3. 二项负似然损失函数
公式(4)将会转换成
a
r
g
min
Θ
∑
i
l
o
g
(
1
+
exp
(
−
2
Y
i
∗
(
f
m
−
1
(
X
i
)
+
T
m
(
X
i
;
Θ
)
)
)
arg \min_{\Theta} \sum_i log(1+\exp(-2Y_i*(f_{m-1}(X_i)+T_m(X_i;\Theta)))
argΘmini∑log(1+exp(−2Yi∗(fm−1(Xi)+Tm(Xi;Θ)))
这里就存在一个问题我去拟合一棵树,目标值是什么,这便是二项负似然损失函数的局限的地方,也是algorithm 1局限的地方。
其实还有很多的损失函数都会存在这样的问题。那么这时候就提出了
g
r
a
d
i
e
n
t
B
o
o
s
t
i
n
g
gradient \quad Boosting
gradientBoosting从而来适应多种损失函数。
(
该
部
分
存
在
疑
问
,
我
并
没
有
解
释
清
楚
)
\color{red}{(该部分存在疑问,我并没有解释清楚)}
(该部分存在疑问,我并没有解释清楚)
g
r
a
d
i
e
n
t
B
o
o
s
t
i
n
g
gradient \quad Boosting
gradientBoosting
现在需要重新计算公式(1),我们并不是直接寻找一个弱分类器对当前的拟合值进行提升。而是通过最速下降法来求解。假设目前是第m轮循环,第m-1轮已经确认N个样本点对应的拟合值为
{
f
m
−
1
(
X
1
)
,
f
m
−
1
(
X
N
)
}
\{f_{m-1}(X_1),f_{m-1}(X_N)\}
{fm−1(X1),fm−1(XN)},那么我们通过
r
m
i
=
−
[
∂
L
(
y
i
,
f
(
X
i
)
)
∂
f
(
X
i
)
]
f
(
X
i
)
=
f
m
−
1
(
X
i
)
r_{mi}=-[\frac {\partial L(y_i,f(X_i))} {\partial f(X_i)}]_{f(X_i)=f_{m-1}(X_i)}
rmi=−[∂f(Xi)∂L(yi,f(Xi))]f(Xi)=fm−1(Xi)
求偏导的方式确定负梯度值,我们记为
g
m
i
g_{mi}
gmi, 然后确定步长
ρ
m
=
a
r
g
min
ρ
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
+
ρ
r
m
i
)
\rho_{m}=arg\min_{\rho}\sum_{i=1}^N L(y_i,f_{m-1}+\rho r_{mi})
ρm=argρmini=1∑NL(yi,fm−1+ρrmi)
从而得到更新
f
m
=
f
m
−
1
−
ρ
m
g
m
f_m=f_{m-1}-\rho_mg_m
fm=fm−1−ρmgm
其中
f
m
f_m
fm表示一个N维向量.
但是问题是这样得到的
f
m
f_m
fm在测试集上是无法使用的,它只是在训练集上确定了梯度值,那么我们能不能使用训练集的梯度值来估计测试集的梯度值呢?问题就是这样解决的,在每一次求得N个训练集的样本的梯度之后,拟合以一棵回归树用来估计测试集的梯度,这时候选择的便是使用均方误差损失函数来拟合梯度。
所以算法过程如下 :
a
l
g
o
r
i
t
h
m
2
algorithm 2
algorithm2
1.Initialize
f
0
(
X
)
=
a
r
g
min
γ
∑
i
=
1
N
L
(
Y
i
,
γ
)
f_0(X)=arg \min_{\gamma} \sum_{i=1}^N L(Y_i,\gamma)
f0(X)=argminγ∑i=1NL(Yi,γ)
2. For m=1 to M
(a) For i=1,2,3…N compute
r
m
i
=
−
[
∂
L
(
y
i
,
f
(
X
i
)
)
∂
f
(
X
i
)
]
f
=
f
m
−
1
r_{mi}= -[\frac {\partial L(y_i,f(X_i))}{\partial f(X_i)}]_{f=f_{m-1}}
rmi=−[∂f(Xi)∂L(yi,f(Xi))]f=fm−1
(b)Fit a regression tree to the target
r
i
m
r_{im}
rim giving terminal regions
R
j
m
,
j
=
1
,
.
.
.
J
m
R_{jm}, \quad j=1,...J_m
Rjm,j=1,...Jm ,that is
θ
m
=
a
r
g
min
θ
∑
i
=
1
N
[
r
m
i
−
T
(
X
i
;
θ
)
]
2
\theta_m=arg\min_{\theta} \sum_{i=1}^N[r_{mi}-T(X_i;\theta)]^2
θm=argθmini=1∑N[rmi−T(Xi;θ)]2
© calculate step length :
ρ
m
=
a
r
g
min
ρ
∑
i
=
1
N
L
(
Y
i
,
f
m
−
1
−
ρ
T
(
X
i
,
θ
m
)
)
\rho_{m}=arg\min_{\rho}\sum_{i=1}^N L(Y_i,f_{m-1}-\rho T(X_i,\theta_m))
ρm=argρmini=1∑NL(Yi,fm−1−ρT(Xi,θm))
(d) Update
f
m
(
X
i
)
=
f
m
−
1
(
X
i
)
+
ρ
m
T
(
X
i
;
θ
m
)
f_m(X_i)=f_{m-1}(X_i)+\rho_m T(X_i;\theta_m)
fm(Xi)=fm−1(Xi)+ρmT(Xi;θm)
3.Output f M ( X ) f_M(X) fM(X)
等价于如下算法
4.常见boosting算法
如果说loss function为均方误差 ,即
L
(
y
,
f
)
=
1
/
2
(
y
−
f
)
2
L(y,f)=1/2(y-f)^2
L(y,f)=1/2(y−f)2,那么
∂
L
(
y
,
f
)
∂
f
=
y
−
f
\frac {\partial L(y,f)} {\partial f}=y-f
∂f∂L(y,f)=y−f 那么可以得到如下算法
a
l
g
o
r
i
t
h
m
3
(
L
S
_
B
o
o
s
t
)
algorithm 3 (LS\_Boost)
algorithm3(LS_Boost)
f
0
(
x
)
=
y
ˉ
f_0(x)= \bar{y}
f0(x)=yˉ --初始化
For m=1 to M do :
y
i
~
=
y
i
−
f
m
−
1
(
X
i
)
,
i
=
1
,
.
.
.
N
\quad \tilde{y_i}=y_i-f_{m-1}(X_i), i=1,...N
yi~=yi−fm−1(Xi),i=1,...N
{
R
j
m
}
1
J
=
J
−
t
e
r
m
i
n
a
l
n
o
d
e
t
r
e
e
(
y
i
~
,
X
i
1
N
)
\quad \{R_{jm}\}_1^J=J-terminal \quad node \quad tree \quad ({\tilde{y_i},X_i}_1^N)
{Rjm}1J=J−terminalnodetree(yi~,Xi1N)
γ
j
m
=
1
∣
R
j
m
∣
∑
x
i
∈
R
j
m
y
i
~
,
j
=
1
,
.
.
.
,
J
\quad \gamma_{jm}=\frac {1} {|R_{jm}|}\sum_{x_i \in R_{jm}} \tilde{y_i},j=1,...,J
γjm=∣Rjm∣1∑xi∈Rjmyi~,j=1,...,J //叶子节点的取值
f
m
(
X
)
=
f
m
−
1
(
X
)
+
∑
j
=
1
J
γ
j
m
1
X
∈
R
j
m
\quad f_m(X)=f_{m-1}(X)+\sum_{j=1}^J \gamma_{jm} 1_{X \in R_{jm}}
fm(X)=fm−1(X)+∑j=1Jγjm1X∈Rjm
End For
如果loss function 为LAD (Least absolute deviation),即
L
(
y
,
f
)
=
∣
y
−
f
∣
L(y,f)=|y-f|
L(y,f)=∣y−f∣ ,那么
∂
L
(
y
,
f
)
∂
f
=
s
i
g
n
(
y
−
f
)
\frac {\partial L(y,f)} {\partial f}=sign(y-f)
∂f∂L(y,f)=sign(y−f)
a
l
g
o
r
i
t
h
m
4
(
L
A
D
_
T
r
e
e
B
o
o
s
t
)
algorithm 4 (LAD\_TreeBoost)
algorithm4(LAD_TreeBoost)
f
0
(
x
)
=
m
e
d
i
a
n
{
y
i
}
1
N
f_0(x)= median\{y_i\}_1^N
f0(x)=median{yi}1N --初始化
For m=1 to M do :
y
i
~
=
s
i
g
n
(
y
i
−
f
m
−
1
(
X
i
)
)
,
i
=
1
,
.
.
.
N
\quad \tilde{y_i}=sign(y_i-f_{m-1}(X_i)), i=1,...N
yi~=sign(yi−fm−1(Xi)),i=1,...N
{
R
j
m
}
1
J
=
J
−
t
e
r
m
i
n
a
l
n
o
d
e
t
r
e
e
(
y
i
~
,
X
i
1
N
)
\quad \{R_{jm}\}_1^J=J-terminal \quad node \quad tree \quad ({\tilde{y_i},X_i}_1^N)
{Rjm}1J=J−terminalnodetree(yi~,Xi1N)
γ
j
m
=
m
e
d
i
a
n
X
i
∈
R
j
m
y
i
~
,
j
=
1
,
.
.
.
,
J
\quad \gamma_{jm}=median_{X_i \in R_{jm}}\tilde{y_i},j=1,...,J
γjm=medianXi∈Rjmyi~,j=1,...,J //叶子节点的取值
f
m
(
X
)
=
f
m
−
1
(
X
)
+
∑
j
=
1
J
γ
j
m
1
X
∈
R
j
m
\quad f_m(X)=f_{m-1}(X)+\sum_{j=1}^J \gamma_{jm} 1_{X \in R_{jm}}
fm(X)=fm−1(X)+∑j=1Jγjm1X∈Rjm
End For
如果使用的loss function 是Huber loss funcation ,也就是
L
(
y
,
F
)
=
{
1
2
(
y
−
f
)
2
∣
y
−
f
∣
<
=
δ
δ
(
∣
y
−
f
∣
−
δ
/
2
)
∣
y
−
f
∣
>
δ
L(y,F)=\begin{cases} \frac 1 2 (y-f)^2 & |y-f| <= \delta \\ \delta(|y-f|-\delta/2) & |y-f|> \delta \\ \end{cases}
L(y,F)={21(y−f)2δ(∣y−f∣−δ/2)∣y−f∣<=δ∣y−f∣>δ
当
∣
y
−
f
∣
<
δ
|y-f|<\delta
∣y−f∣<δ时,便是军方误差,当
∣
y
−
f
∣
>
δ
|y-f|>\delta
∣y−f∣>δ时,为了保证在
∣
y
−
f
∣
=
δ
|y-f|=\delta
∣y−f∣=δ处的一阶导数和函数值相同,并且降低利群点对模型的影响。使用
δ
(
∣
y
−
f
∣
−
δ
/
2
)
\delta(|y-f|-\delta/2)
δ(∣y−f∣−δ/2).
这样
∂
L
(
y
,
f
)
∂
f
=
{
y
−
f
∣
y
−
f
∣
<
=
δ
δ
∗
s
i
g
n
(
y
−
f
)
∣
y
−
f
∣
>
δ
\frac {\partial L(y,f)} {\partial f}= \begin{cases} y-f & |y-f| <= \delta \\ \delta*sign(y-f) & |y-f| > \delta \\ \end{cases}
∂f∂L(y,f)={y−fδ∗sign(y−f)∣y−f∣<=δ∣y−f∣>δ
这里涉及到两个问题
- δ \delta δ的选择,其实它就是确定离群点的位置,在第m轮迭代时,我们可以使用 δ m = q u a n t i l e α ∣ y i − f m ( X i ) ∣ 1 N \delta_m=quantile_{\alpha}{|y_i-f_m(X_i)|}_1^N δm=quantileα∣yi−fm(Xi)∣1N ,例如可以选择75%分位数。
- 在第m次迭代时,叶节点的预测值确定,这个无法像均方误差,或者是绝对值误差那样有显性解,需要进行估计, 具 体 估 计 方 式 后 续 补 上 \color {red}{具体估计方式后续补上} 具体估计方式后续补上在这里只给出结果
给出相应的算法
Algorithm 5 M _ TreeBoost
f
0
(
x
)
=
m
e
d
i
a
n
y
i
1
N
f_0(x)=median{y_i}_1^N
f0(x)=medianyi1N
For m=1 to M do :
$\quad r_{m-1}(X_i)=y_i-f_{m-1}(x_i) , i=1,…,N $
δ
m
=
q
u
a
n
t
i
l
e
α
∣
r
m
−
1
(
X
i
)
∣
1
N
\quad \delta_m=quantile_{\alpha}{|r_{m-1}(X_i)|}_1^N
δm=quantileα∣rm−1(Xi)∣1N
\quad
calculate derivative
y
i
~
\tilde{y_i}
yi~
y
i
~
=
{
r
m
−
1
(
X
i
)
∣
r
m
−
1
(
X
i
)
∣
<
=
δ
m
δ
m
∗
s
i
g
n
(
r
m
−
1
(
X
i
)
)
∣
r
m
−
1
(
X
i
)
∣
>
δ
m
\tilde{y_i}= \begin{cases} r_{m-1}(X_i) & |r_{m-1}(X_i)| <=\delta_m \\ \delta_m*sign(r_{m-1}(X_i)) & |r_{m-1}(X_i)| >\delta_m \\ \end{cases}
yi~={rm−1(Xi)δm∗sign(rm−1(Xi))∣rm−1(Xi)∣<=δm∣rm−1(Xi)∣>δm
{
R
j
m
}
1
J
=
J
−
t
e
r
m
i
n
a
l
n
o
d
e
t
r
e
e
{
y
i
~
,
X
i
}
1
N
\quad \{R_{jm}\}_1^J=J-terminal \quad node \quad tree \quad \{\tilde{y_i},X_i\}_1^N
{Rjm}1J=J−terminalnodetree{yi~,Xi}1N
r
~
j
m
=
m
e
d
i
a
n
X
i
∈
R
j
m
{
r
m
−
1
(
X
i
)
}
,
j
=
1
,
.
.
.
J
\quad \tilde{r}_{jm}=median_{X_i \in R_{jm}} \{ r_{m-1}(X_i)\},j=1,...J
r~jm=medianXi∈Rjm{rm−1(Xi)},j=1,...J
γ
j
m
=
r
~
j
m
+
1
N
j
m
∑
X
i
∈
R
j
m
s
i
g
n
(
r
m
−
1
(
X
i
)
−
t
~
j
m
)
∗
min
(
δ
m
,
a
b
s
(
r
m
−
1
(
X
i
)
−
r
~
j
m
)
)
,
j
=
1
,
.
.
.
,
J
\quad \gamma_{jm}=\tilde{r}_{jm}+\frac 1 {N_{jm}} \sum_{X_i \in R_{jm}} sign(r_{m-1}(X_i)-\tilde{t}_{jm})* \min(\delta_m,abs(r_{m-1}(X_i)-\tilde{r}_{jm})),j=1,...,J
γjm=r~jm+Njm1∑Xi∈Rjmsign(rm−1(Xi)−t~jm)∗min(δm,abs(rm−1(Xi)−r~jm)),j=1,...,J
f
m
(
X
)
=
f
m
−
1
(
X
)
+
∑
j
=
1
J
γ
j
m
1
(
X
∈
R
j
m
)
\quad f_m(X)=f_{m-1}(X)+\sum_{j=1}^J \gamma_{jm}1_{(X \in R_{jm})}
fm(X)=fm−1(X)+∑j=1Jγjm1(X∈Rjm)
end For
如果loss function 是负二项对数似然损失,也就是
L
(
y
,
f
)
=
l
o
g
(
1
+
e
x
p
(
−
2
y
f
)
)
,
y
∈
{
−
1
,
1
}
L(y,f)=log(1+exp(-2yf)) , y \in \{-1,1\}
L(y,f)=log(1+exp(−2yf)),y∈{−1,1}
需要注意的是在叶节点的值确定时,使用了单步的 Newton-Raphson估计,也就是在求
min
γ
1
N
∑
i
=
1
N
l
o
g
(
1
+
e
x
p
(
−
2
y
i
(
f
m
−
1
(
X
i
)
+
γ
)
)
\min_{\gamma} \frac 1 N \sum_{i=1}^Nlog(1+exp(-2y_i(f_{m-1}(X_i)+\gamma))
γminN1i=1∑Nlog(1+exp(−2yi(fm−1(Xi)+γ))
其实是没有解析解的,因此使用了初始化
γ
0
=
0
\gamma_0=0
γ0=0,然后进行了一步的Newton_Raphson法,估算出了
γ
j
m
\gamma_{jm}
γjm ,简单说就是
γ
j
m
=
γ
0
−
∂
G
/
∂
γ
∣
γ
=
γ
0
∂
2
G
/
∂
γ
2
∣
γ
=
γ
0
\gamma_{jm}=\gamma_0-\frac {\partial G/\partial\gamma|_{\gamma=\gamma_0}} {\partial^2 G/\partial\gamma^2|_{\gamma=\gamma_0}}
γjm=γ0−∂2G/∂γ2∣γ=γ0∂G/∂γ∣γ=γ0
其中
G
(
γ
)
=
1
N
∑
i
=
1
N
l
o
g
(
1
+
e
x
p
(
−
2
y
i
(
f
m
−
1
(
X
i
)
+
γ
)
)
G(\gamma)= \frac 1 N \sum_{i=1}^Nlog(1+exp(-2y_i(f_{m-1}(X_i)+\gamma))
G(γ)=N1i=1∑Nlog(1+exp(−2yi(fm−1(Xi)+γ))
我们可以得到如下算法 :
Algorithm 6 (L_K - TreeBoost)
f
0
(
X
)
=
1
2
l
o
g
1
+
y
ˉ
1
−
y
ˉ
f_0(X)=\frac {1} {2} log \frac{1+\bar{y}} {1-\bar{y}}
f0(X)=21log1−yˉ1+yˉ
For m=1,…,M :
y
~
i
=
2
∗
y
i
/
(
1
+
e
x
p
(
2
y
i
f
m
−
1
(
X
i
)
)
)
,
i
=
1
,
.
.
.
,
N
\quad \tilde{y}_i=2*y_i/(1+exp(2y_i f_{m-1}(X_i))),i=1,...,N
y~i=2∗yi/(1+exp(2yifm−1(Xi))),i=1,...,N
{
R
j
m
}
1
J
=
J
−
t
e
r
m
i
n
a
l
n
o
d
e
t
r
e
e
(
{
y
i
~
,
X
i
}
1
N
)
\quad \{ R_{jm}\}_1^J = J-terminal node tree(\{\tilde{y_i},X_i\}^N_1)
{Rjm}1J=J−terminalnodetree({yi~,Xi}1N)
γ
j
m
=
∑
X
i
∈
R
j
m
y
~
i
/
∑
X
i
∈
R
j
m
∣
y
~
i
∣
(
2
−
∣
y
~
i
∣
)
,
j
=
1
,
.
.
.
,
J
\quad \gamma_{jm}=\sum_{X_i \in R_{jm}} \tilde{y}_i /\sum_{X_i \in R_{jm}}|\tilde{y}_i|(2-|\tilde{y}_i|),j=1,...,J
γjm=∑Xi∈Rjmy~i/∑Xi∈Rjm∣y~i∣(2−∣y~i∣),j=1,...,J
F
m
(
X
)
=
F
m
−
1
(
X
)
+
∑
j
=
1
J
γ
j
m
1
(
X
∈
R
j
m
)
\quad F_m(X)=F_{m-1}(X)+\sum_{j=1}^J\gamma_{jm} 1(X \in R_{jm})
Fm(X)=Fm−1(X)+∑j=1Jγjm1(X∈Rjm)
end For
如果是多分类逻辑回归和分类,这时候y的取值已经不再是{-1,1},所以需要重新确定loss function
L
(
{
y
k
,
f
k
(
X
)
1
K
}
)
=
−
∑
k
=
1
K
y
k
l
o
g
p
k
(
X
)
L(\{y_k,f_k(X)_1^K\})=-\sum_{k=1}^K y_k log p_k(X)
L({yk,fk(X)1K})=−k=1∑Kyklogpk(X)
这里需要注意的是针对K个类,都有一个
f
k
(
X
)
f_k(X)
fk(X)与之对应,而
f
k
f_k
fk与
p
k
p_k
pk之间的关系如下:
f
k
(
X
)
=
l
o
g
p
k
(
X
)
−
1
/
K
∑
l
=
1
f_k(X)=log p_k(X)-1/K \sum_{l=1}
fk(X)=logpk(X)−1/Kl=1∑
或者
p
k
(
X
)
=
e
x
p
(
F
k
(
X
)
)
/
∑
l
=
1
K
e
x
p
(
F
l
(
X
)
)
p_k(X)=exp(F_k(X))/\sum_{l=1}^K exp(F_l(X))
pk(X)=exp(Fk(X))/l=1∑Kexp(Fl(X))
另外
y
k
∈
{
0
,
1
}
y_k \in \{0,1\}
yk∈{0,1}
那么
y
~
k
=
−
[
∂
L
(
{
y
k
,
F
k
(
X
)
}
1
K
)
∂
F
k
(
X
i
)
]
{
F
k
(
x
)
=
F
k
,
m
−
1
(
X
)
}
1
K
=
y
k
−
P
k
,
m
−
1
(
X
)
\tilde{y}_{k}=-[\frac {\partial L(\{y_{k},F_k(X)\}_1^K)} {\partial F_k(X_i)}]_{\{F_k(x)=F_{k,m-1}(X)\}_1^K}=y_k-P_{k,m-1}(X)
y~k=−[∂Fk(Xi)∂L({yk,Fk(X)}1K)]{Fk(x)=Fk,m−1(X)}1K=yk−Pk,m−1(X)
其中
P
k
,
m
−
1
(
X
)
=
e
x
p
(
f
k
,
m
−
1
(
X
)
)
/
∑
l
=
1
K
e
x
p
(
F
l
,
m
−
1
(
X
)
)
P_{k,m-1}(X)=exp(f_{k,m-1}(X))/\sum_{l=1}^Kexp(F_{l,m-1}(X))
Pk,m−1(X)=exp(fk,m−1(X))/l=1∑Kexp(Fl,m−1(X))
$F_{k0}(X)=0,k=1,…,K $
For m=1 to M :
p
k
(
X
)
=
e
x
p
(
F
k
(
X
)
)
/
∑
l
=
1
K
e
x
p
(
F
l
(
X
)
)
,
k
=
1
,
.
.
.
K
\quad p_k(X)=exp(F_k(X))/\sum_{l=1}^Kexp(F_l(X)),k=1,...K
pk(X)=exp(Fk(X))/∑l=1Kexp(Fl(X)),k=1,...K
$ \quad$ For k=1,…, K
y
~
i
k
=
y
i
k
−
p
k
(
X
i
)
,
i
=
1
,
.
.
.
,
N
\quad \tilde{y}_{ik}=y_{ik}-p_k(X_i),i=1,...,N
y~ik=yik−pk(Xi),i=1,...,N
{
R
j
k
m
}
j
=
1
J
=
J
−
t
e
r
m
i
n
a
l
n
o
d
e
n
o
d
e
t
r
e
e
(
{
y
~
i
k
,
X
i
}
1
N
)
\quad \{R_{jkm}\}_{j=1}^J =J-terminal \quad node \quad node \quad tree(\{ \tilde{y}_{ik},X_i\}_1^N)
{Rjkm}j=1J=J−terminalnodenodetree({y~ik,Xi}1N)
γ
j
k
m
=
K
−
1
K
∑
x
i
∈
R
j
k
m
y
~
i
k
∑
X
i
∈
R
j
k
m
∣
y
~
i
k
∣
(
1
−
∣
y
~
i
k
∣
)
\quad \gamma_{jkm}=\frac {K-1} {K} \frac {\sum_{x_i \in R_{jkm}} \tilde{y}_{ik}} {\sum_{X_i \in R_{jkm}}|\tilde{y}_{ik}| (1-|\tilde{y}_{ik}|)}
γjkm=KK−1∑Xi∈Rjkm∣y~ik∣(1−∣y~ik∣)∑xi∈Rjkmy~ik
F
k
m
(
X
)
=
F
f
,
m
−
1
(
X
)
+
∑
j
=
1
J
γ
j
k
m
1
(
X
∈
R
j
k
m
)
\quad F_{km}(X)=F_{f,m-1}(X)+\sum_{j=1}^J\gamma_{jkm}1(X \in R_{jkm})
Fkm(X)=Ff,m−1(X)+∑j=1Jγjkm1(X∈Rjkm)
end For
5.xgboost
xgboost是在gradient boosting 的基础上进行改进,并且实现了并行化,提高了运算效率 ,更加利于工程学上的使用。
这里只介绍xgboost的原理,针对它的工程学上的实现细节不多做介绍.
我们知道在Gradient boost中需要通过梯度下降的方法来获得一个对树模型的拟合,但是xgboost并不采用梯度下降的方法,而是对损失函数做了二次泰勒展开逼近,从而简化了树模型拟合过程。
首先 在第m次迭代时,我们的目的是
min
Θ
∑
i
L
(
Y
i
,
f
m
−
1
(
X
i
)
+
T
m
(
X
i
;
Θ
)
)
\min_{\Theta} \sum_i L(Y_i,f_{m-1}(X_i)+T_m(X_i;\Theta))
Θmini∑L(Yi,fm−1(Xi)+Tm(Xi;Θ))
xgboost对L(Y,F)做了二次泰勒展开
min
Θ
∑
i
L
(
Y
i
,
f
m
−
1
(
X
i
)
)
+
q
m
T
m
(
X
i
;
Θ
)
+
1
/
2
h
m
T
m
2
(
X
i
;
Θ
)
(5)
\min_{\Theta} \sum_i L(Y_i,f_{m-1}(X_i))+q_m T_m(X_i;\Theta)+1/2 h_m T_m^2(X_i;\Theta) \tag 5
Θmini∑L(Yi,fm−1(Xi))+qmTm(Xi;Θ)+1/2hmTm2(Xi;Θ)(5)
其中
q
m
=
[
∂
L
(
Y
i
,
f
(
X
i
)
)
∂
f
(
X
i
)
]
f
(
X
i
)
=
f
m
−
1
(
X
i
)
q_m=[\frac{\partial {L(Y_i,f(X_i))}}{\partial f(X_i)}]_{f(X_i)=f_{m-1}(X_i)}
qm=[∂f(Xi)∂L(Yi,f(Xi))]f(Xi)=fm−1(Xi)
h
m
=
[
∂
2
L
(
Y
i
,
f
(
X
i
)
)
∂
f
(
X
i
)
2
]
f
(
X
i
)
=
f
m
−
1
(
X
i
)
h_m=[\frac{\partial^2 {L(Y_i,f(X_i))}}{\partial f(X_i)^2}]_{f(X_i)=f_{m-1}(X_i)}
hm=[∂f(Xi)2∂2L(Yi,f(Xi))]f(Xi)=fm−1(Xi)
xgboost在上述损失函数的基础上添加了正则化项,针对第m轮迭代生成的决策树的相关参数,一个是叶子节点的个数(可以表示树的结构复杂性),一个是在不同的分割区间的取值,这里用w表示。
Ω
(
T
(
X
;
Θ
)
)
=
γ
T
+
1
/
2
λ
∑
j
=
1
T
w
j
2
\Omega(T(X;\Theta))=\gamma T+1/2 \lambda \sum_{j=1}^T w_j^2
Ω(T(X;Θ))=γT+1/2λj=1∑Twj2
其中T表示树的叶子节点的个数。
w
j
w_j
wj表示在叶子节点中的预测值的取值。
将正则项添加到公式5中,得到下式
min
Θ
∑
i
=
1
N
[
q
m
i
T
m
(
X
i
;
Θ
)
+
1
/
2
h
m
i
T
m
2
(
X
i
;
Θ
)
]
+
γ
T
+
1
/
2
λ
∑
j
=
1
T
w
j
2
\min_\Theta\sum_{i=1}^N[q_{mi}T_m(X_i;\Theta)+1/2 h_{mi} T_m^2(X_i;\Theta)]+\gamma T+1/2\lambda \sum_{j=1}^T w_j^2
Θmini=1∑N[qmiTm(Xi;Θ)+1/2hmiTm2(Xi;Θ)]+γT+1/2λj=1∑Twj2
等价于
min
Θ
∑
j
=
1
T
[
(
∑
i
∈
I
j
q
m
i
)
w
j
+
1
/
2
(
∑
i
∈
I
j
h
m
i
+
λ
)
w
j
2
]
+
γ
T
(6)
\min_{\Theta}\sum_{j=1}^T[(\sum_{i \in I_j}q_{mi})w_j+1/2(\sum_{i \in I_j}h_{mi}+\lambda)w_j^2]+\gamma T \tag 6
Θminj=1∑T[(i∈Ij∑qmi)wj+1/2(i∈Ij∑hmi+λ)wj2]+γT(6)
当一棵树确定之后,我们便可以解出
w
j
∗
=
∑
i
∈
I
j
q
m
i
∑
i
∈
I
j
h
m
i
+
λ
+
γ
T
(7)
w_j^*=\frac {\sum_{i \in I_j} q_{mi}} {\sum_{i \in I_j} h_{mi}+\lambda}+ \gamma T \tag 7
wj∗=∑i∈Ijhmi+λ∑i∈Ijqmi+γT(7)
将
w
j
∗
w_j^*
wj∗带入公式6得到
−
1
/
2
∑
j
=
1
T
(
∑
i
∈
I
j
q
m
i
)
2
∑
i
∈
I
j
h
m
i
+
λ
+
γ
T
(8)
-1/2 \sum_{j=1}^T \frac {(\sum_{i \in I_j} q_{mi})^2} {\sum_{i \in I_j} h_{mi}+\lambda}+\gamma T \tag 8
−1/2j=1∑T∑i∈Ijhmi+λ(∑i∈Ijqmi)2+γT(8)
我们知道了公式7和公式8,自然可以使用于决策树的训练。xgboost指出在决策树的生成过程中的分割函数为
L
s
p
l
i
t
=
1
/
2
[
(
∑
i
∈
I
L
q
m
i
)
2
∑
i
∈
I
L
h
m
i
+
λ
+
(
∑
i
∈
I
R
q
m
i
)
2
∑
i
∈
I
R
h
m
i
+
λ
−
(
∑
i
∈
I
q
m
i
)
2
∑
i
∈
I
h
m
i
+
λ
]
−
γ
L_{split}=1/2[\frac {(\sum_{i \in I_L} q_{mi})^2} {\sum_{i \in I_L} h_{mi}+\lambda}+\frac {(\sum_{i \in I_R} q_{mi})^2} {\sum_{i \in I_R} h_{mi}+\lambda}-\frac {(\sum_{i \in I} q_{mi})^2} {\sum_{i \in I} h_{mi}+\lambda}]-\gamma
Lsplit=1/2[∑i∈ILhmi+λ(∑i∈ILqmi)2+∑i∈IRhmi+λ(∑i∈IRqmi)2−∑i∈Ihmi+λ(∑i∈Iqmi)2]−γ
其中I表示父节点中的样本点集,
I
L
I_L
IL和
I
R
I_R
IR分别表示由父节点生成的左子节点中的样本点和右子节点的样本数。