树模型
1、决策树 ID3,C4.5,CART
2、随机森林RF
3、Adaboost
4、GBDT
5、XGboost
6、孤立森林(异常检测)
四、GBDT
提升树,GBDT同样基于最小化第m m 个学习器和前m−1m−1个学习器累加起来损失函数最小,提升树采用残差的思想来最小化损失函数,将投票权重放到学习器上,使得基学习器的权重都为1;GBDT将损失用一阶多项式拟合,基学习器拟合梯度,学习器的权重为一阶多项式的系数。
在前面的Adaboost中,我们需要学习M M 个基学习器,赋予不同的权重组合得到最后的强学习器。它是基于MM个基学习器组合而成。而提升树中,直接将他们以“残差(损失函数的残差)”的形式累加起来,故也为加法模型,而且是逐步累加。
提升树模型如下:
fM(x)=∑m=1MT(x;θm) f M ( x ) = ∑ m = 1 M T ( x ; θ m )
其中,
T(x,θm)
T
(
x
,
θ
m
)
表示决策树,
θm
θ
m
为决策树的参数,
M
M
为树的个数。
提升树优化过程:
输入:训练集{(xi,yi)}Ni=1{(xi,yi)}i=1N,损失函数 L(y,f(x)) L ( y , f ( x ) )
输出:提升树fM(x) f M ( x )
1)初始化f0(x)=0 f 0 ( x ) = 0
2)对m=1,2,...M m = 1 , 2 , . . . M
a)计算残差:
rmi=yi−fm−1(xi) ,{1,2,…,N} r m i = y i − f m − 1 ( x i ) , { 1 , 2 , … , N }
b)拟合残差
rmi
r
m
i
学习基学习器
T(x;θm)
T
(
x
;
θ
m
)
,训练集为
{(xi,rmi)}Ni=1
{
(
x
i
,
r
m
i
)
}
i
=
1
N
c)更新模型: fm(x)=fm−1(x)+T(x;θm) f m ( x ) = f m − 1 ( x ) + T ( x ; θ m )
3)得到最终的强学习器
fM(x)=∑m=1MT(x;θm) f M ( x ) = ∑ m = 1 M T ( x ; θ m )
可以看出,提升树本质与Adboost一致,也是最小化第
m
m
个学习器和前m−1m−1个学习器组合的损失函数,不同的是提升树采用决策树作为基学习器,采用残差的思想使得每个决策树的投票权重为
1
1
。
GBDT
GBDT是基学习器采用的Decision Tree的Gradient Boosting方法。Gradient Boosting模型与Adaboost的形式一致,采用MM个基学习器的线性组合得到最终模型:
fM(x)=∑mγmT(x;θm) f M ( x ) = ∑ m γ m T ( x ; θ m )
首先确定初始模型,定义初始基学习器
f0(x)
f
0
(
x
)
,当模型迭代到第
m
m
步时:
fm(x)=fm−1(x)+γmT(x;θm)fm(x)=fm−1(x)+γmT(x;θm)
通过最小化损失来确定参数
θm
θ
m
的值:
argminθm∑iL(yi,fm−1(xi)+γmT(x;θm)) a r g min θ m ∑ i L ( y i , f m − 1 ( x i ) + γ m T ( x ; θ m ) )
这里有两种理解Gradient Boosting的方式,从优化角度可以理解是采用梯度下降算法,
T
T
表示负梯度方向,γmγm为步长。从模型角度我们可以理解为损失函数一阶多项式展开
γmT(x,θm)+fm−1
γ
m
T
(
x
,
θ
m
)
+
f
m
−
1
,而
T
T
表示一阶信息,γmγm为系数。
优化角度,保证损失函数在递减:
L(yi,fm(xi))<L(yi,fm−1(xi)) L ( y i , f m ( x i ) ) < L ( y i , f m − 1 ( x i ) )
为了使得损失函数不断减少,即梯度下降:
fm(xi)=fm−1(xi)+γm(−∂L(yi,fm−1(xi))∂fm−1(xi)) f m ( x i ) = f m − 1 ( x i ) + γ m ( − ∂ L ( y i , f m − 1 ( x i ) ) ∂ f m − 1 ( x i ) )
fm(x)=fm−1(x)+γmT(x;θm)
f
m
(
x
)
=
f
m
−
1
(
x
)
+
γ
m
T
(
x
;
θ
m
)
代入上式有:
T(x;θm)=−∂L(yi,fm−1(xi))∂fm−1(xi) T ( x ; θ m ) = − ∂ L ( y i , f m − 1 ( x i ) ) ∂ f m − 1 ( x i )
所以
Gradient Boosting 的算法流程如下:
输入:训练集{(xi,yi)}Ni=1 { ( x i , y i ) } i = 1 N ,损失函数L(y,f(x)) L ( y , f ( x ) )
输出:fM(x) f M ( x )
1)初始化f0(x)=0 f 0 ( x ) = 0
2)对m=1,2,...M m = 1 , 2 , . . . M
a)计算梯度:
rmi=[−∂L(yi,f(xi))∂f(xi)]f(xi)=fm−1(x) ,{1,2,…,N} r m i = [ − ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x i ) = f m − 1 ( x ) , { 1 , 2 , … , N }
b)拟合梯度
rmi
r
m
i
学习基学习器
T(x;θm)
T
(
x
;
θ
m
)
,训练集为
{(xi,rmi)}Ni=1
{
(
x
i
,
r
m
i
)
}
i
=
1
N
c)根据梯度下降算法,计算学习器γm γ m :
γm=argminγ∑iL(yi,fm−1(xi)+γT(x;θm)) γ m = a r g min γ ∑ i L ( y i , f m − 1 ( x i ) + γ T ( x ; θ m ) )
d)更新模型:
fm(x)=fm−1(x)+γmT(x;θm)
f
m
(
x
)
=
f
m
−
1
(
x
)
+
γ
m
T
(
x
;
θ
m
)
3)得到最终的强学习器
fM(x)=∑m=1MγmT(x;θm) f M ( x ) = ∑ m = 1 M γ m T ( x ; θ m )
可以看出
Gradient Boosting 是一个不断基于残差弥补的模型,目标不断地减少Bais,而没有关注Variance。它不像随机森林的集成引入随机性减少Variance的思想。
下面考虑决策树为基学习器的Gradient Boosting的方法GBDT,其在GB基础上有两点值得一提:
1)GBDT,采用决策树作为基函数将样本划分到固定数目J J 个决策区间Rmj,j=1,2..J,m=1,2..MRmj,j=1,2..J,m=1,2..M
2)在决策树中决策函数采用指示函数I(x∈Rmj) I ( x ∈ R m j ) ,梯度与步长的积直接放到γmj γ m j 上
下面给出GBDT回归和分类两个问题的算法流程
1)GBDT 回归
输入:训练集{(xi,yi)}Ni=1 { ( x i , y i ) } i = 1 N ,xi∈Rn,y∈R x i ∈ R n , y ∈ R ,损失函数L(y,f(x)) L ( y , f ( x ) )
输出:fM(x) f M ( x )
1)初始时给出一个最优的偏置常数c c ,f0(x)=cf0(x)=c
f0(x)=argminc∑iL(yi,c) f 0 ( x ) = a r g min c ∑ i L ( y i , c )
2)对
m=1,2,...M
m
=
1
,
2
,
.
.
.
M
a)计算梯度:
rmi=[−∂L(yi,f(xi))∂f(xi)]f(xi)=fm−1(x) ,{1,2,…,N} r m i = [ − ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x i ) = f m − 1 ( x ) , { 1 , 2 , … , N }
b)拟合梯度
rmi
r
m
i
学习一个回归树
T(x;θm)=αI(x∈Rmj)
T
(
x
;
θ
m
)
=
α
I
(
x
∈
R
m
j
)
,产生
J
J
个决策区间Rmj,j=1,2..JRmj,j=1,2..J
c)对于决策区间j=1,2..J j = 1 , 2.. J ,计算γmj γ m j :
γmj=argminγ∑xi∈RmjL(yi,fm−1(xi)+γmjI(x∈Rmj)) γ m j = a r g min γ ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + γ m j I ( x ∈ R m j ) )
d)更新模型:
fm(x)=fm−1(x)+∑Jj=1γmjI(x∈Rmj)
f
m
(
x
)
=
f
m
−
1
(
x
)
+
∑
j
=
1
J
γ
m
j
I
(
x
∈
R
m
j
)
3)得到最终的强学习器
fM(x)=∑m=1M∑j=1JγmjI(x∈Rmj) f M ( x ) = ∑ m = 1 M ∑ j = 1 J γ m j I ( x ∈ R m j )
2)
GBDT分类
考虑K K 分类问题,采用Softmax思想,将KK类映射到K K 维。第mm个决策树的决策第k k 维的值为fM,k(x)fM,k(x),对输出进行Softmax归一化,可以得到k k 类的概率为pm,k(x),pm,k(x),K K 类的概率和∑kpm,k(x)=1∑kpm,k(x)=1,分类损失函数采用交叉熵损失。
pm,k(x)=exp(fm,k(x))∑Kl=1exp(fm,l(x)), k=1,…,K p m , k ( x ) = e x p ( f m , k ( x ) ) ∑ l = 1 K e x p ( f m , l ( x ) ) , k = 1 , … , K
似然函数为:
L(yi,fm(xi))=∏k=1K[fm,k(xi)]yik L ( y i , f m ( x i ) ) = ∏ k = 1 K [ f m , k ( x i ) ] y i k
对数损失函数为:
L(yi,fm(xi))=−∑k=1Kyiklogfm,k(xi) L ( y i , f m ( x i ) ) = − ∑ k = 1 K y i k l o g f m , k ( x i )
由于Softmax将分类映射到
K
K
维,对应的基分类器和损失函数都是KK维。因此算法流程中负梯度方向也是一个
K
K
维向量。
输入:训练集{(xi,yi)}Ni=1{(xi,yi)}i=1N, xi∈Rn,y∈R x i ∈ R n , y ∈ R ,损失函数 L(y,f(x)) L ( y , f ( x ) )
输出:fM(x) f M ( x )
1)初始时f0,k(x)=0 f 0 , k ( x ) = 0
2)对m=1,2,...M m = 1 , 2 , . . . M
a)对决策树fm−1,k f m − 1 , k 进行Softmax归一化
pm−1,k(x)=exp(fm−1,k(x))∑Kl=1exp(fm−1,l((x)), k=1,…,K p m − 1 , k ( x ) = e x p ( f m − 1 , k ( x ) ) ∑ l = 1 K e x p ( f m − 1 , l ( ( x ) ) , k = 1 , … , K
b)对
k=1,2..K
k
=
1
,
2..
K
ba)计算梯度
rik=∂L(yi,fm−1(xi))∂fm−1,k(xi)=yik–pm−1,k(xi), i=1,2,…N r i k = ∂ L ( y i , f m − 1 ( x i ) ) ∂ f m − 1 , k ( x i ) = y i k – p m − 1 , k ( x i ) , i = 1 , 2 , … N
bb)拟合梯度
rik
r
i
k
学习第
m
m
个决策树T(x;θm)=αI(x∈Rmkj)T(x;θm)=αI(x∈Rmkj)在第
k
k
维产生的JJ个决策区间
Rmkj,j=1,2..J
R
m
k
j
,
j
=
1
,
2..
J
rik=∂L(yi,fm−1(xi))∂fm−1,k(xi)=yik–pm−1,k(xi), i=1,2,…N r i k = ∂ L ( y i , f m − 1 ( x i ) ) ∂ f m − 1 , k ( x i ) = y i k – p m − 1 , k ( x i ) , i = 1 , 2 , … N
bc)计算第
m
m
颗树第kk维在区间
Rmj
R
m
j
的参数
γmkj
γ
m
k
j
γmkj=K−1K∑xi∈Rmkjrik∑xi∈Rmkj|rik|(1−|rik|), j=1,2,..., γ m k j = K − 1 K ∑ x i ∈ R m k j r i k ∑ x i ∈ R m k j | r i k | ( 1 − | r i k | ) , j = 1 , 2 , . . . ,
bd)更新模型:
fm,k(x)=fm−1,k(x)+∑Jj=1γmkjI(x∈Rmkj)
f
m
,
k
(
x
)
=
f
m
−
1
,
k
(
x
)
+
∑
j
=
1
J
γ
m
k
j
I
(
x
∈
R
m
k
j
)
3)得到最终的强学习器
fM(x)=∑m=1M∑j=1JγmjI(x∈Rmj) f M ( x ) = ∑ m = 1 M ∑ j = 1 J γ m j I ( x ∈ R m j )
GBDT到此,可以看出Boosting的这些方法,都是前向分步加法模型,分类回归采用不同的损失函数,加法模型都是考虑学习
M
M
模型来不断地减小损失函数,即第mm个模型的学习是基于前
m−1
m
−
1
个模型组合起来最小化损失函数。Adboost是基于最小化损失函数在导数为
0
0
处取到,针对二分类问题导出样本系数,决策器权重系数,决策树。提升树是基于残差思想最小化损失函数,使得决策树的权重为11,GBDT采用一阶多项式来拟合残差,进而导出梯度提升的思想。GBDT中
γmTm
γ
m
T
m
存在冗余项,在GBDT中用决策树拟合梯度,
γ
γ
来确定步长。