1 GBDT概述
梯度提升树(GBDT,Gradient Boosting Decison Tree),同为Boosting家族的一员,它和Adaboost有很大的不同。Adaboost 是利用前一轮弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去,简单的说是Boosting框架+任意基学习器算法+指数损失函数。
GBDT通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。训练的过程是通过降低偏差来不断提高最终分类器的精度
GBDT由三部分构成:回归树(Regression Decistion Tree,DT)、GB(Gradient Boosting)和Shrinkage(衰减)
回归树(Regression Decistion Tree, DT):无论是处理回归问题还是二分类以及多分类,GBDT使用的决策树通通都是都是CART回归树。因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。
梯度提升树(Grandient Boosting):是提升树(Boosting Tree)的一种改进算法。假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁;我们去拟合损失,拟合的数值为6岁,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有1岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。最后将每次拟合的岁数加起来便是模型输出的结果。
衰减(Shrinkage):每次走一小步逐渐逼近结果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即模型不完全信任每一个残差树,认为每颗树只“学习”到一部分预测信息,所以在累加的时候只累加一小部分,通过多棵树的迭代就可以弥补不足。
迭代决策树和随机森林的区别:
- 随机森林使用抽取不同的样本构建不同的子树,也就是说第 m m m棵树的构建和前 m − 1 m-1 m−1棵树的结果是没有关系
- 迭代决策树在构建子树的时候,使用之前构建子树结果后形成的残差作为输入数据构建下一个子树;然后最终预测的时候按照子树构建的顺序进行预测,并将预测结果相加
2 回归树生成算法(DT)
输入:训练数据集 D D D;
输出:回归树 f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^M {c}_mI(x \in R_m) f(x)=∑m=1McmI(x∈Rm) 。
在训练数据集所在的输入空间中 , 递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
(1) 选择最优切分变量 x ( j ) x^{(j)} x(j) 与切分点 s s s , 求解
min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + [ min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min \limits_{j,s} [\min \limits_{c_1} \sum_{x_i \in R_1(j,s)}(y_i-c_1)^2+[\min \limits_{c_2} \sum_{x_i \in R_2(j,s)}(y_i-c_2)^2] j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+[c2minxi∈R2(j,s)∑(yi−c2)2]
遍历变量 x ( j ) x^{(j)} x(j) , 对固定的切分变量 x ( j ) x^{(j)} x(j) 扫描切分点 s s s ,选择使上式达到最小值的对 ( j , s ) (j, s) (j,s) 。
(2) 用选定的对 ( j , s ) (j, s) (j,s)划分区域并决定相应的输出值:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } , R 2 ( j , s ) = { x ∣ x ( j ) > s } c ^ m = 1 N m ∑ x i ∈ R m ( j , s ) y i , x i ∈ R m , m = 1 , 2 R_1(j,s)=\{ x|x^{(j)}\le s\}, R_2(j,s)=\{ x|x^{(j)}> s\}\\ \hat{c}_m=\frac{1}{N_m}\sum_{x_i \in R_m(j,s)}y_i,\ \ \ \ \ \ \ x_i \in R_m,m=1,2 R1(j,s)={
x∣x(j)≤s},R2(j,s)={
x∣x(j)>s}c^m=Nm1xi∈Rm(j,s)∑yi, xi∈Rm,m=1,2
(3) 继续对两个子区域调用步骤 (1), (2) ,直至满足停止条件 。
(4) 将输入空间划分为 M M M 个区域 R 1 , R 2 , … , R M R_1,R_2,…,R_M R1,R2,…,RM,生成决策树:
f ( x ) = ∑ m = 1 M c ^ m I ( x ∈ R m ) f(x)=\sum_{m=1}^M {\hat{c}}_mI(x \in R_m) f(x)=m=1∑Mc^mI(x∈Rm)
3 Gradient Boosting:拟合负梯度
梯度提升树(Grandient Boosting)是提升树(Boosting Tree)的一种改进算法,所以在讲梯度提升树之前先来说一下提升树。
提升树算法:
-
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)}
-
输出:提升树 f M ( x ) f_M(x) fM(x)。
-
(1)初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
-
(2)对 m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M:
- a. 计算残差 r