GBDT(Gradient Boosting Decision Tree):梯度提升决策树
GBRT(Gradient Boosting Regression Tree):梯度提升回归树
CART(Classification And Regression Tree)
在Boosting算法中,当采取平方误差损失函数时,损失函数刚好表达的是当前模型的拟合残差,最优化比较方便;当采取指数损失函数时,也很方便;但对于一般函数时,最优化十分困难。因此,利用最速下降的近似法,即利用损失函数的负梯度在当前模型的值,作为回归问题中Boosting算法的残差的近似值。在回归问题中,这称为梯度提升回归树(GBRT),分类问题则称为梯度提升决策树(GBDT)。GBDT的性能相对于Boosting有一定的提升,它和AdaBoost都是Boosting族方法的一种。
XGBoost的性能在GBDT上又有一步提升。对XGBoost最大的认知在于其能够自动地运用CPU的多线程进行并行计算,同时在算法精度上也进行了精度的提高。 由于GBDT在合理的参数设置下,往往要生成一定数量的树才能达到令人满意的准确率,在数据集较复杂时,模型可能需要几千次迭代运算,但是XGBoost利用并行的CPU更好的解决了这个问题。
传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
正式介绍:
首先gbdt 是通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的残差来达到将数据分类或者回归的算法。
- GDBT的训练过程:gbdt通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的,因为训练的过程是通过降低偏差来不断提高最终分类器的精度。弱分类器一般会选择为CART(分类回归树),由于上述高偏差和简单的要求 ,每个分类回归树的深度不会很深。最终的总分类器是将每轮训练得到的弱分类器加权求和得到的(也就是加法模型)。但是我们真正关心的是:1.是希望损失函数能够不断的减小,2.是希望损失函数能够尽可能快的减小。所以如何尽可能快的减小呢?
- 让损失函数沿着梯度反方向下降,这个就是gbdt 的 gb的核心了。 利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树。gbdt 每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。
- 这样每轮训练的时候都能够让损失函数尽可能快的减小,尽快的收敛达到局部最优解或者全局最优解。
- GBDT 如何用于分类 ?:首先明确一点,gbdt 无论用于分类还是回归一直都是使用的CART 回归树。不会因为我们所选择的任务是分类任务就选用分类树,这里面的核心是因为gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练的。这里的残差就是当前模型的负梯度值 。这个要求每轮迭代的时候,弱分类器的输出的结果相减是有意义的。残差相减是有意义的。