GBDT是通过采用加法模型(即基函数的线性组合),不断减小训练过程产生的残差来达到将数据分类或者回归的算法
GBDT是类似于梯度下降的思想,只不过寻找的不是最优参数而是最优函数F,每次将损失函数对F求偏导得到负梯度,通过拟合这个负梯度使得损失函数最小化
GBDT通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练,弱分类器一般选择CART树,但是每个分类回归树的深度不会很深,最终的总分类器是将每轮训练得到的弱分类器加权求和得到的
通过经验风险最小化来确定下一个弱分类器的参数。我们希望损失函数能够不断地下降并且尽可能快的下降。如何尽可能快的下降呢?就是让损失函数沿着梯度方向下降,利用损失函数的负梯度在当前模型中的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树,这样GBDT每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。这样每轮训练的时候都能让损失函数尽可能快的减小,尽快的收敛达到局部最优解或者全局最优解
与AdaBoost算法不同,梯度提升方法在迭代的每一步构建一个能够沿着梯度最陡的方向降低损失(steepest-descent)的学习器来弥补已有模型的不足。经典的AdaBoost算法只能处理采用指数损失函数的二分类学习任务[2],而梯度提升方法通过设置不同的可微损失函数可以处理各类学习任务(多分类、回归、Ranking等),应用范围大大扩展。
平方损失函数的一阶导(也就是梯度)正好等于负的残差
存在问题:会对异常值过于敏感,所以一般回归类的损失函数会用绝对损失函数或者huber损失函数来代替平方损失函数
为什么梯度提升方法倾向于选择决策树(通常是CART树)作为基学习器呢?这与决策树算法自身的优点有很大的关系。决策树可以认为是if-then规则的集合,易于理解,可解释性强,预测速度快。同时,决策树算法相比于其他的算法需要更少的特征工程,比如可以不用做特征标准化,可以很好的处理字段缺失的数据,也可以不用关心特征间是否相互依赖等。决策树能够自动组合多个特征,它可以毫无压力地处理特征间的交互关系并且是非参数化的,因此你不必担心异常值或者数据是否线性可分(举个例子,决策树能轻松处理好类别A在某个特征维度x的末端,类别B在中间,然后类别A又出现在特征维度x前端的情况)。不过,单独使用决策树算法时,有容易过拟合缺点。所幸的是,通过各种方法,抑制决策树的复杂性,降低单颗决策树的拟合能力,再通过梯度提升的方法集成多个决策树,最终能够很好的解决过拟合的问题。
回归问题提升树用的是下列前向分步算法:
在分布算法的第 m 步,给定当前模型 ,需求解:
当采用平方损失函数时,
损失变为: 这里 r 就是残差
Adaboost, GBDT 与 XGBoost 的区别 - 杜博亚的文章 - 知乎
GBDT 就是用回归树拟合残差,当损失函数是平方损失函数时,用回归树拟合残差就是用回归树拟合负梯度,实际上是在通过梯度下降法对模型参数进行更新
由 K 棵cart回归树树组成的加法模型,用前向分步算法,逐步逼近优化目标函数。写出目标函数表达式。将目标损失函数看成的函数泰勒展开。由于这里只用了一阶导,对于平方损失函数,负梯度就是残差,于是每次拟合上一个模型的残差得到新的树。这里对残差拟合其实就是通过梯度下降法对模型进行更新
- GBDT如何选择特征
GBDT的分类器默认是CART树,当然也可以用其他基分类器。所以GBDT选择特征的方法就是就是CART回归树生成的过程。即每次遍历所有特征和所有切分点来找到最优特征的最优切分点
- 如何利用GBDT构建特征
GBDT本身不能产生特征,但是我们可以用GBDT去构建特征的组合。LR本身适合处理线性可分的数据,如果想让LR处理非线性的数据,一种方式是组合不同特征,增强LR对非线性分布的拟合能力。但是使用人工j经验知识来组合特征过于耗费能力,所以facebook提出了利用GBDT产生有效的特征组合,以便于LR的训练,提升模型最终的结果
GBDT参数
弱学习器数量、树的最大深度、最大叶子节点数、学习率、划分时考虑的最大特征数
GBDT步长?
在梯度下降算法中,需要用步长确定梯度下降的速度,步长是自己指定的,在GBDT算法中用到的梯度下降,步长是通过计算得到的。计算的规则是使得到的新学习器 损失函数值最小数
GBDTshrinkage
Shrinkage是GBDT的第三个基本概念,中文含义为“缩减”。它的基本思想就是:每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。换句话说缩减思想不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,只有通过多学几棵树才能弥补不足。
Shrinkage仍然以残差作为学习目标,但由于它采用的是逐步逼近目标的方式,导致各个树的残差是渐变的而不是陡变的。之所以这样做也是基于模型过拟合的考虑
GBDT中哪些部分可以并行
1.计算每个样本的负梯度
2.分裂选择最佳特征及其分割点的时候,对特征计算相对应的误差及均值
3.更新每个样本的负梯度
4.最后预测过程中,每个样本将之前的所有树的结果累加的时候
GBDT无论用于回归还是分类都是使用CART回归树,在多分类问题中,假如是三分类,则在这一轮训练时其实是同时训练三棵树
GBDT算法用于分类问题 - hunter7z的文章 - 知乎
https://zhuanlan.zhihu.com/p/46445201