本文Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)做一个总结。GBDT有很多简称,有GBT(Gradient Boosting Tree), GTB(Gradient Tree Boosting ), GBRT(Gradient Boosting Regression Tree), MART(Multiple Additive Regression Tree),其实都是指的同一种算法,本文统一简称GBDT。

一、前向分步算法

在求解加法模型时,公式如下第一个,在给定训练数据及损失函数L(y, f(x))的条件下,学习加法模型f(x)就成为经验风险极小化损失函数极小化问题,公式如下第二个:
机器学习算法梳理—GBDT算法
机器学习算法梳理—GBDT算法
前向分步算法的思想为:学习的是加法模型,那如果能够从前向后,每一步只学习一个基函数及其系数,然后逐步逼近优化目标式(第二式),那么就可以简化优化的复杂度。即每一步优化函数变为:
机器学习算法梳理—GBDT算法
具体如下:
输入数据: 训练数据集T ={(x1,y1), (x2, y2), …, (xN, yN)};损失函数L(y, f(x));基函数集{b(x; r)};
输出: 加法模型f(x)
机器学习算法梳理—GBDT算法
因此,前向分布算法将同时求解从m=1到M的所有参数βm, rm的优化问题简化为逐次求解各个βm, rm的优化问题。

二、负梯度拟合

在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是 Ht−1(x) , 损失函数是 L(f(x),Ht−1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器 ht(x) ,让本轮的损失 L(f(x),ht(x)+Ht−1(x))最小,那么GBDT是如何实现让本轮的损失最小的呢?
  针对这个问题,大牛Freidman提出了用损失函数的负梯度来拟合本轮损失 L(f(x),ht(x)+Ht−1(x)) 的近似值,进而拟合一个CART回归树。第 t 轮的第 i 个样本的损失函数的负梯度表示为 :
机器学习算法梳理—GBDT算法
利用 (xi,rti),i=1,2,⋯,m(xi,rti),i=1,2,⋯,m ,我们可以拟合一棵CART回归树,得到了第 t 棵回归树,其对应的叶结点区域 Rtj,j=1,2,⋯,JRtj,j=1,2,⋯,J。其中 J为叶子结点的个数。
  针对每一个叶子结点里的样本,我们求出使损失函数最小,也就是拟合叶子结点最好的输出值 ctj
机器学习算法梳理—GBDT算法
这样我们就得到了本轮的决策树拟合函数如下:
机器学习算法梳理—GBDT算法
从而本轮最终得到的强学习器的表达式如下:
机器学习算法梳理—GBDT算法
通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。

三、损失函数

1.分类问题损失函数

对于分类算法,其损失函数一般有对数损失函数和指数损失函数两种:
(1)如果是指数损失函数,则损失函数表达式为
机器学习算法梳理—GBDT算法
(2)如果是对数损失函数,分为二元分类和多元分类两种,
对于二元分类
机器学习算法梳理—GBDT算法

2.回归问题损失函数

对于回归算法,常用损失函数有如下4种:
(1)均方差,这个是最常见的回归损失函数了
机器学习算法梳理—GBDT算法
(2)绝对损失,这个损失函数也很常见
机器学习算法梳理—GBDT算法
(3)Huber损失,它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。
(4)分位数损失。它对应的是分位数回归的损失函数。

四、回归算法

**输入:**训练样本 D={(x1,y1),(x2,y2),⋯,(xm,ym)}D={(x1,y1),(x2,y2),⋯,(xm,ym)},最大迭代次数(基学习器数量) T,损失函数 L
**输出:**强学习器 H(x)
算法流程:
机器学习算法梳理—GBDT算法

五、二元分类

对于二元GBDT,如果用类似于逻辑回归的对数似然损失函数,则损失函数为:
机器学习算法梳理—GBDT算法
其中,y∈{−1,+1}。此时的负梯度误差是 :
机器学习算法梳理—GBDT算法
对于生成的决策树,我们各个叶子节点的最佳残差拟合值为 :
机器学习算法梳理—GBDT算法
由于上式比较难优化,我们一般使用近似值代替:
机器学习算法梳理—GBDT算法
除了负梯度计算和叶子节点的最佳残差拟合的线性搜索,二元GBDT分类和GBDT回归算法过程相同。

六、正则化

和Adaboost一样,我们也需要对GBDT进行正则化,防止过拟合。GBDT的正则化主要有三种方式。

1.步长设置(learning rate)

对于前面的弱学习器的迭代,加上了正则化项:
机器学习算法梳理—GBDT算法
对于同样的训练集学习效果,较小的步长ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。

2.子采样比例(subsample)

取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。
  使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。

七、优缺点

GBDT主要的优点有:
(1)可以灵活处理各种类型的数据,包括连续值和离散值。
(2)在相对少的调参时间情况下,预测的准备率也可以比较高。这个是相对SVM来说的。
(3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点有:
(1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

八、sklearn参数

机器学习算法梳理—GBDT算法
因基分类器是决策树,所以很多参数都是用来控制决策树生成的,这些参数与前面决策树参数基本一致,对于一致的就不进行赘述。

loss:损失函数度量,有对数似然损失deviance和指数损失函数exponential两种,默认是deviance,即对数似然损失,如果使用指数损失函数,则相当于Adaboost模型。

criterion: 样本集的切分策略,决策树中也有这个参数,但是两个参数值不一样,这里的参数值主要有friedman_mse、mse和mae3个,分别对应friedman最小平方误差、最小平方误差和平均绝对值误差,friedman最小平方误差是最小平方误差的近似。

subsample:采样比例,这里的采样和bagging的采样不是一个概念,这里的采样是指选取多少比例的数据集利用决策树基模型去boosting,默认是1.0,即在全量数据集上利用决策树去boosting。

warm_start:“暖启动”,默认值是False,即关闭状态,如果打开则表示,使用先前调试好的模型,在该模型的基础上继续boosting,如果关闭,则表示在样本集上从新训练一个新的基模型,且在该模型的基础上进行boosting。

属性/对象

feature_importance_:特征重要性。

oob_improvement_:每一次迭代对应的loss提升量。oob_improvement_[0]表示第一次提升对应的loss提升量。

train_score_:表示在样本集上每次迭代以后的对应的损失函数值。

loss_:损失函数。

estimators_:基分类器个数。

方法

apply(X):将训练好的模型应用在数据集X上,并返回数据集X对应的叶指数。

decision_function(X):返回决策函数值(比如svm中的决策距离)

fit(X,Y):在数据集(X,Y)上训练模型。

get_parms():获取模型参数

predict(X):预测数据集X的结果。

predict_log_proba(X):预测数据集X的对数概率。

predict_proba(X):预测数据集X的概率值。

score(X,Y):输出数据集(X,Y)在模型上的准确率。

staged_decision_function(X):返回每个基分类器的决策函数值

staged_predict(X):返回每个基分类器的预测数据集X的结果。

staged_predict_proba(X):返回每个基分类器的预测数据集X的概率结果。

九、应用场景

GBDT几乎可用于所有回归问题(线性/非线性),相对logistic regression仅能用于线性回归,GBDT的适用面非常广。亦可用于二分类问题(设定阈值,大于阈值为正例,反之为负例)

参考文献

1.https://blog.csdn.net/akirameiao/article/details/80009155
2.http://www.itongji.cn/detail?type=1124
3.https://blog.csdn.net/molu_chase/article/details/78111148

相关文章: