文章目录
本文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)就成为经验风险极小化损失函数极小化问题,公式如下第二个:
前向分步算法的思想为:学习的是加法模型,那如果能够从前向后,每一步只学习一个基函数及其系数,然后逐步逼近优化目标式(第二式),那么就可以简化优化的复杂度。即每一步优化函数变为:
具体如下:
输入数据: 训练数据集T ={(x1,y1), (x2, y2), …, (xN, yN)};损失函数L(y, f(x));基函数集{b(x; r)};
输出: 加法模型f(x)
因此,前向分布算法将同时求解从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 个样本的损失函数的负梯度表示为 :
利用 (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来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。
三、损失函数
1.分类问题损失函数
对于分类算法,其损失函数一般有对数损失函数和指数损失函数两种:
(1)如果是指数损失函数,则损失函数表达式为
(2)如果是对数损失函数,分为二元分类和多元分类两种,
对于二元分类
2.回归问题损失函数
对于回归算法,常用损失函数有如下4种:
(1)均方差,这个是最常见的回归损失函数了
(2)绝对损失,这个损失函数也很常见
(3)Huber损失,它是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。
(4)分位数损失。它对应的是分位数回归的损失函数。
四、回归算法
**输入:**训练样本 D={(x1,y1),(x2,y2),⋯,(xm,ym)}D={(x1,y1),(x2,y2),⋯,(xm,ym)},最大迭代次数(基学习器数量) T,损失函数 L
**输出:**强学习器 H(x)
算法流程:
五、二元分类
对于二元GBDT,如果用类似于逻辑回归的对数似然损失函数,则损失函数为:
其中,y∈{−1,+1}。此时的负梯度误差是 :
对于生成的决策树,我们各个叶子节点的最佳残差拟合值为 :
由于上式比较难优化,我们一般使用近似值代替:
除了负梯度计算和叶子节点的最佳残差拟合的线性搜索,二元GBDT分类和GBDT回归算法过程相同。
六、正则化
和Adaboost一样,我们也需要对GBDT进行正则化,防止过拟合。GBDT的正则化主要有三种方式。
1.步长设置(learning rate)
对于前面的弱学习器的迭代,加上了正则化项:
对于同样的训练集学习效果,较小的步长ν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
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参数
因基分类器是决策树,所以很多参数都是用来控制决策树生成的,这些参数与前面决策树参数基本一致,对于一致的就不进行赘述。
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