GBDT(Gradient Boosting Decision Tree)是一种可用于处理分类和回归任务的机器学习集成算法。GBDT是属于Boosting族的算法,因此也是采用分步构建模型的方法。
之前到AdaBoost训练弱分类器关注的是那些被分错的样本,AdaBoost每一次训练都是为了减少错误分类的样本。而GBDT训练弱分类器关注的是残差,也就是上一个弱分类器的表现与完美答案之间的差距,GBDT每一次训练分类器,都是为了减少这个差距,GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。这是什么意思呢? 我可以举个例子,假设我们去银行借钱,我们想让一个决策树系统来预测可以借给我们多少钱, 如果标准答案是1000的话,假设第一棵决策树预测,可以借给我们950块钱, 那么离标准答案的1000还差50, 效果不算好,能不能提高一些呢?我们就再加一棵决策树,这课决策树过来之后,看到前面的那个已经预测到950了,只是差50, 那么我可以聚焦在这个50上,把这个残差变得再小一些,所以第二个决策树预测结果是30, 那么前两棵决策树预测结果结合起来是980, 离标准答案差20, 所以加了一棵树之后,效果好了。那么还能不能提升呢?我再来一棵树,发现残差只有20了,那我把残差变得再小, 结果第三个决策树预测20, 那么这三棵树就可以正确的预测最终的1000了。
所以GBDT就是这样的一个学习方式了,GBDT是boosting集成学习,boosting集成学习由多个相关联的决策树联合决策, 什么是相关联?就是我上面的例子:
- 有一个样本[数据->标签]是:[(feature1,feature2,feature3)-> 1000块]
- 第一棵决策树用这个样本训练的预测为950
- 那么第二棵决策树训练时的输入,这个样本就变成了:[(feature1,feature2,feature3)->50]
- 第二棵决策树用这个样本训练的预测为30
- 那么第三棵决策树训练时的输入,这个样本就变成了:[(feature1,feature2,feature3)->20]
- 第三棵决策树用这个样本训练的预测为20
这就是GBDT的工作原理了, GBDT是旨在不断减少残差(回归),通过不断加入新的树旨在在残差减少(负梯度)的方向上建立一个新的模型。——即损失函数是旨在最快速度降低残差。
前向分步算法
考虑加法模型:
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
f(x) = \sum_{m=1}^M \beta_mb(x;\gamma_m)
f(x)=m=1∑Mβmb(x;γm)
其中,
b
(
x
;
γ
m
)
b(x;\gamma_m)
b(x;γm) 为基函数,
γ
m
\gamma_m
γm 为基函数的参数,
β
m
\beta_m
βm 为基函数的系数。
给定训练数据及损失函数
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x)) 的条件下,学习加法模型
f
(
x
)
f(x)
f(x) 成为经验风险极小化即损失函数极小化问题:
arg
min
β
m
,
γ
m
∑
i
=
1
N
L
(
y
i
,
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
)
\arg \min \limits_{\beta_m,\gamma_m} \sum_{i=1}^N L \left(y_i,\sum_{m=1}^M \beta_mb(x;\gamma_m)\right)
argβm,γmmini=1∑NL(yi,m=1∑Mβmb(x;γm))
上面的式子是个复杂的优化问题。
前向分步算法采用贪心策略求解此问题:
-
通过不断迭代,逐步逼近最优化目标函数
-
从前向后,每次迭代只学习一个基函数及其系数
-
每次迭代都只优化下面的函数:
min β , γ ∑ i = 1 N L ( y i , β b ( x ; γ ) ) \min \limits_{\beta,\gamma} \sum_{i=1}^N L \left(y_i,\beta b(x;\gamma)\right) β,γmini=1∑NL(yi,βb(x;γ))
具体而言,给定训练数据集 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) 的前向分步算法如下:
输入:训练数据集 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)
这样,前向分步算法将同时求解从 m = 1 m=1 m=1到 M M M所有参数 β m , γ m \beta_m,\,\gamma_m βm,γm的优化问题简化为逐次求解各个 β m , γ m \beta_m,\,\gamma_m βm,γm的优化问题。
负梯度拟合
负梯度拟合,就是在损失函数梯度的负方向上进行拟合。用损失函数的负梯度来拟合本轮损失的近似值,给定当前模型
f
(
x
)
=
f
m
−
1
(
x
)
f(x)=f_{m-1}(x)
f(x)=fm−1(x),则第
m
m
m轮的第
i
i
i个样本的损失函数的负梯度表示为:
r
m
i
=
−
[
∂
L
(
y
i
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
m
−
1
(
x
)
r_{mi}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}
rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x)
那么问题来了,为什么要拟合负梯度?
我们的目标是找到一个
f
(
x
)
f(x)
f(x)使得损失函数
L
(
y
i
,
f
(
x
i
)
)
L(y_i, f(x_i))
L(yi,f(xi))的值最小,那么可以将
f
(
x
)
f(x)
f(x)视为参数,使用梯度下降法进行优化。假设当前找到的
f
(
x
)
=
f
m
−
1
(
x
)
f(x)=f_{m-1}(x)
f(x)=fm−1(x),则根据梯度下降算法,第m轮的
f
(
x
)
m
f(x)_m
f(x)m的迭代公式如下:
f
(
x
)
m
=
f
(
x
)
m
−
1
−
∂
L
(
y
i
,
f
m
−
1
(
x
i
)
)
∂
f
m
−
1
(
x
i
)
f(x)_m=f(x)_{m-1}-\frac{\partial L(y_i,\,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)}
f(x)m=f(x)m−1−∂fm−1(xi)∂L(yi,fm−1(xi))
根据前向分步算法的加法模型有:
f
(
x
)
m
=
f
(
x
)
m
−
1
+
T
(
x
;
γ
)
f(x)_m=f(x)_{m-1}+T(x;\gamma)
f(x)m=f(x)m−1+T(x;γ)
其中
T
(
x
;
γ
)
=
β
b
(
x
i
;
γ
)
T(x;\gamma) =\beta b(x_i;\gamma)
T(x;γ)=βb(xi;γ),是新一轮需要训练的树模型。对比上面两个式子,不难得到:
T
(
x
;
γ
)
=
−
∂
L
(
y
i
,
f
m
−
1
(
x
i
)
)
∂
f
m
−
1
(
x
i
)
T(x;\gamma) =-\frac{\partial L(y_i,\,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)}
T(x;γ)=−∂fm−1(xi)∂L(yi,fm−1(xi))
上面式子的左边为树的预测值,右边为真实值,所以整个过程就变成了每次拟合损失函数的负梯度的值:
r
m
i
=
−
[
∂
L
(
y
i
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
m
−
1
(
x
)
r_{mi}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}
rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x)
也就是说,通过拟合损失函数的负梯度值,就可以达到优化损失函数的目的。
上面的结论要求了损失函数必须一阶可导,因此损失函数的选择很重要。
损失函数
分类问题
指数损失函数:
L
(
y
,
f
(
x
)
)
=
e
(
−
y
f
(
x
)
)
L(y,f(x))=e^{(-yf(x))}
L(y,f(x))=e(−yf(x))
对数似然损失函数(二分类):
L
(
y
,
f
(
x
)
)
=
l
o
g
(
1
+
e
(
−
y
f
(
x
)
)
)
L(y,f(x))=log\left(1+e^{(-yf(x))}\right)
L(y,f(x))=log(1+e(−yf(x)))
对数似然损失函数(多分类):
L
(
y
,
f
(
x
)
)
=
−
∑
k
=
1
K
y
k
l
o
g
p
k
(
x
)
L(y,f(x))=-\sum_{k=1}^Ky_k\,log\,p_k(x)
L(y,f(x))=−k=1∑Kyklogpk(x)
回归问题
平方损失函数:
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
(
x
)
)
=
∣
(
y
−
f
(
x
)
)
∣
L(y,f(x))=|(y-f(x))|
L(y,f(x))=∣(y−f(x))∣
对应负梯度方向为:
s
i
g
n
(
y
i
−
f
(
x
i
)
)
sign(y_i-f(x_i))
sign(yi−f(xi))
现在有损失函数的优化策略和损失函数,下面看看GBDT的具体实现。
回归问题
回归问题对梯度的处理相对简单,故先讲讲回归问题。
输入: 训练数据集 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 X\subseteq R^n,y_i \in Y\subseteq R T={(x1,y1),(x2,y2),...,(xN,yN)},xi∈X⊆Rn,yi∈Y⊆R;损失函数 L ( Y , f ( X ) ) L(Y,f(X)) L(Y,f(X));最大迭代次数 M M M。
输出: 回归树 f ( x ) f(x) f(x)
步骤:
-
初始化弱学习器 f 0 ( x ) = arg min c ∑ i = 1 N L ( y i , c ) f_0(x)=\mathop{\arg\min}_{c}\sum_{i=1}^{N}L(y_i,c) f0(x)=argminci=1∑NL(yi,c)
-
对 m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M:
-
对 i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N,计算损失函数在当前模型的负梯度:
r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x) -
利用 ( x i , r m i ) ( i = 1 , 2 , . . . , N ) (x_i,r_{mi})\,(i=1,2,...,N) (xi,rmi)(i=1,2,...,N),拟合一棵CART树,得到第 m m m棵树,其对应的叶子节点区域为 R m j , j = 1 , 2 , . . . , J R_{mj},\,j=1,2,...,J Rmj,j=1,2,...,J。其中 J J J为树 m m m的叶子节点的个数。
-
对 j = 1 , 2 , . . . , J j=1,2,...,J j=1,2,...,J,在损失函数极小化条件下,估计出相应叶节点区域的最佳拟合值:
c m j = arg min c ∑ x j ∈ R m j N L ( y i , f m − 1 ( x i ) + c ) c_{mj}=\mathop{\arg\min}_{c}\sum_{x_j\in R_{mj}}^{N}L(y_i,f_{m-1}(x_i)+c) cmj=argmincxj∈Rmj∑NL(yi,fm−1(xi)+c) -
更新强学习器:
f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^{J}c_{mj}\,I(x\in R_{mj}) fm(x)=fm−1(x)+j=1∑JcmjI(x∈Rmj)
-
-
得到强学习器 f ( x ) f(x) f(x)的表达式:
f ( x ) = f M ( x ) = f 0 ( x ) + ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) f(x)=f_M(x)=f_0(x)+\sum_{m=1}^M\sum_{j=1}^{J}c_{mj}\,I(x\in R_{mj}) f(x)=fM(x)=f0(x)+m=1∑Mj=1∑JcmjI(x∈Rmj)
分类
下面再看看GBDT分类算法,GBDT的分类算法从思想上和GBDT的回归算法没有区别,但是由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差,好在GBDT可以根据学习任务灵活选择相应的损失函数。
为了解决这个问题,有两个方法,一个是用指数损失函数,此时GBDT退化为Adaboost算法。另一种方法用类似逻辑回归的对数似然函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。
二分类
输入: 训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i ∈ X ⊆ R n , y i ∈ Y = { − 1 , + 1 } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},x_i\in X\subseteq R^n,y_i \in Y=\{-1,+1\} T={(x1,y1),(x2,y2),...,(xN,yN)},xi∈X⊆Rn,yi∈Y={−1,+1};损失函数 L ( y , f ( x ) ) = l o g ( 1 + e ( − y f ( x ) ) ) L(y,f(x))=log\left(1+e^{(-yf(x))}\right) L(y,f(x))=log(1+e(−yf(x)));最大迭代次数 M M M。
**输出:**分类树 f ( x ) f(x) f(x)
-
初始化弱学习器 f 0 ( x ) = arg min c ∑ i = 1 N L ( y i , c ) f_0(x)=\mathop{\arg\min}_{c}\sum_{i=1}^{N}L(y_i,c) f0(x)=argminci=1∑NL(yi,c)
-
对 m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M
-
对 i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N,计算损失函数在当前模型的负梯度:
r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) = y i 1 + e ( y i f ( x i ) ) r_{mi}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}=\frac{y_i}{1+e^{(y_i\,f(x_i))}} rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x)=1+e(yif(xi))yi -
利用 ( x i , r m i ) ( i = 1 , 2 , . . . , N ) (x_i,r_{mi})\,(i=1,2,...,N) (xi,rmi)(i=1,2,...,N),拟合一棵CART树,得到第 m m m棵树,其对应的叶子节点区域为 R m j , j = 1 , 2 , . . . , J R_{mj},\,j=1,2,...,J Rmj,j=1,2,...,J。其中 J J J为树 m m m的叶子节点的个数。
-
对 j = 1 , 2 , . . . , J j=1,2,...,J j=1,2,...,J,在损失函数极小化条件下,估计出相应叶节点区域的最佳拟合值:
c m j = arg min c ∑ x j ∈ R m j N l o g ( 1 + e ( − y i ( f t − 1 ( x i ) + c ) ) ) c_{mj}=\mathop{\arg\min}_{c}\sum_{x_j\in R_{mj}}^{N}log\left(1+e^{(-y_i(f_{t-1}(x_i)+c))}\right) cmj=argmincxj∈Rmj∑Nlog(1+e(−yi(ft−1(xi)+c))) -
由于上式比较难优化,我们一般使用近似值代替:
c m j = ∑ x j ∈ R m j / ∑ x j ∈ R m j ∣ r m i ∣ ( 1 − ∣ r m i ∣ ) c_{mj}=\sum_{x_j\in R_{mj}}/\sum_{x_j\in R_{mj}}|r_{mi}|(1-|r_{mi}|) cmj=xj∈Rmj∑/xj∈Rmj∑∣rmi∣(1−∣rmi∣) -
更新强学习器:
f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^{J}c_{mj}\,I(x\in R_{mj}) fm(x)=fm−1(x)+j=1∑JcmjI(x∈Rmj)
-
-
得到强学习器 f ( x ) f(x) f(x)的表达式:
f ( x ) = f M ( x ) = f 0 ( x ) + ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) f(x)=f_M(x)=f_0(x)+\sum_{m=1}^M\sum_{j=1}^{J}c_{mj}\,I(x\in R_{mj}) f(x)=fM(x)=f0(x)+m=1∑Mj=1∑JcmjI(x∈Rmj)
不难发现,除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,二元GBDT分类和GBDT回归算法过程相同。
多分类
考虑到分类和回归算法的过程相似性,以下就阐述多分类GBDT算法的时候不再给出具体的流程,而仅仅列出差异的部分。对于多分类任务,GDBT的做法是采用一对多的策略。也就是说,对每个类别训练M个分类器。假设有K个类别,那么训练完之后总共有M*K颗树。
多分类GBDT比二分类GBDT复杂些,对应的是多元逻辑回归和二元逻辑回归的复杂度差别。假设类别数为
K
K
K,则此时我们的对数似然损失函数为:
L
(
y
,
f
(
x
)
)
=
−
∑
k
=
1
K
y
k
l
o
g
p
k
(
x
)
(1)
L(y,f(x))=-\sum_{k=1}^Ky_k\,log\,p_k(x) \tag 1
L(y,f(x))=−k=1∑Kyklogpk(x)(1)
其中如果样本输出类别为
k
k
k,则
y
k
y_k
yk =1,第
k
k
k 类的概率
p
k
(
x
)
p_k(x)
pk(x) 的表达式为:
p
k
(
x
)
=
e
f
k
(
x
)
∑
l
=
1
K
e
f
l
(
x
)
(
s
o
f
t
m
a
x
函
数
)
(2)
p_k(x)=\frac{e^{f_k(x)}}{\sum_{l=1}^{K}e^{f_l(x)}} \quad (softmax函数) \tag 2
pk(x)=∑l=1Kefl(x)efk(x)(softmax函数)(2)
将式子(2)代入式子(1)后,计算出第
m
m
m 轮的第
i
i
i 个样本对应类别
l
l
l 的负梯度误差为:
r
m
i
l
=
−
[
∂
L
(
y
i
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
l
,
m
−
1
(
x
)
=
y
i
l
−
p
l
,
m
−
1
(
x
i
)
r_{mil}=-[\frac{\partial L(y_i,\,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{l,\,m-1}(x)}=y_{il}-p_{l,m-1}(x_i)
rmil=−[∂f(xi)∂L(yi,f(xi))]f(x)=fl,m−1(x)=yil−pl,m−1(xi)
观察上式可以看出,其实这里的误差就是样本
i
i
i 对应类别
l
l
l 的真实概率和
t
−
1
t-1
t−1 轮预测概率的差值。
对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为:
c
m
j
l
=
arg
min
c
j
l
∑
i
=
0
m
∑
k
=
1
K
L
(
y
k
,
f
m
−
1
,
l
(
x
)
+
∑
j
=
0
J
c
j
l
I
(
x
i
∈
R
m
j
)
)
c_{mjl}=\mathop{\arg\min}_{c_{jl}}\sum_{i=0}^{m}\sum_{k=1}^{K}L\left(y_k,\,f_{m-1,\,l}(x)+\sum_{j=0}^{J}c_{jl}\,I(x_i \in R_{mj})\right)
cmjl=argmincjli=0∑mk=1∑KL(yk,fm−1,l(x)+j=0∑JcjlI(xi∈Rmj))
由于上式比较难优化,我们一般使用近似值代替:
c
m
j
l
=
K
K
−
1
∑
x
i
∈
R
m
j
l
r
m
i
l
∑
x
i
∈
R
m
i
l
∣
r
m
i
l
∣
(
1
−
∣
r
m
i
l
∣
)
c_{mjl}=\frac{K}{K-1}\frac{\sum_{x_i\in R_{mjl}}r_{mil}}{\sum_{x_i\in R_{mil}}|r_{mil}|(1-|r_{mil}|)}
cmjl=K−1K∑xi∈Rmil∣rmil∣(1−∣rmil∣)∑xi∈Rmjlrmil
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,多分类GBDT与二分类GBDT以及GBDT回归算法过程相同。
正则化
GBDT有非常快降低Loss的能力,这也会造成一个问题:Loss迅速下降,模型偏差(bias),方差(variance)高,造成过拟合。下面简单介绍GBDT中抵抗过拟合的方法:
-
限制树的复杂度,即对弱学习器CART树进行正则化剪枝,比如如控制树的最大深度、节点的最少样本数、最大叶子节点数、节点分支的最小样本数等
-
Shrinkage,其思想认为,每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。用方程来看更清晰,即给每棵数的输出结果乘上一个步长 α \alpha α(learning rate)
对于前面的弱学习器的迭代:
f m ( x ) = f m − 1 ( x ) + T ( x ; γ m ) f_m(x)=f_{m-1}(x)+T(x;\gamma_m) fm(x)=fm−1(x)+T(x;γm)
加上正则化项,则有
f
m
(
x
)
=
f
m
−
1
(
x
)
+
α
T
(
x
;
γ
m
)
f_m(x)=f_{m-1}(x)+\alpha\, T(x;\gamma_m)
fm(x)=fm−1(x)+αT(x;γm)
此处,
α
\alpha
α的取值范围为(0,1]。对于同样的训练集学习效果,较小
α
\alpha
α的意味着需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起决定算法的拟合效果。
优缺点
优点
- 可以灵活处理各种类型的数据,包括连续值和离散值
- 具有伸缩不变性,不用归一化特征
- 具有特征组合和特征选择的作用
- 可自然地处理缺失值
- 相对SVM而言,在相对较少的调参时间情况下,预测的准确率也比较高
- 在使用一些健壮的损失函数,对异常值得鲁棒性非常强。比如Huber损失函数和Quantile损失函数
缺点
- 由于弱学习器之间存在较强依赖关系,难以整体并行训练
参考文章: