机器学习 | GBDT

一.基本原理

通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练,弱分类器一般会选择cart回归树

核心:每一棵树都建立在之前所学的所有树的绝对和残差,这个残差就是一个加预测值后的真实值的累加量

二.优缺点

优点

  • 预测阶段的计算速度快,树与树之间可并行化计算
  • 在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首
  • 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系
  • 可以灵活处理各种类型的数据,包括连续值和离散值
  • 使用一些比较strong的损失函数,比如Huber损失函数和Quantile损失函数,对异常数值的鲁棒性非常强
  • 相对于SVM来说,在相对较少的调参时间下,预测的准确度较高

缺点

  • GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络
  • GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显
  • 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度
  • 由于弱学习器之间存在依赖关系,难以并行训练数据

三.适用场景

  • 可以用于筛选特征
  • 几乎可用于所有的回归问题
  • 可以用于二分类问题

四.推导

机器学习 | GBDT_第1张图片 机器学习 | GBDT_第2张图片

机器学习 | GBDT_第3张图片

五.常见面试题

1.GBDT怎样设置单棵树的停止生长条件?

  • 节点分裂时的最小样本数
  • 树的最大深度
  • 最多叶子结点数
  • Loss满足约束条件

2.GBDT如何评估特征的权重大小?

  • 通过计算每个特征在训练集下的信息增益,最后计算每个特征信息增益与所有特征信息增益之和的比例为权重值
  • 借鉴投票机制。用相同的GBDT参数对w每个特征训练出一个模型,然后在该模型下计算每个特征正确分类的个数,最后计算每个特征正确分类的个数与所有正确分类个数之和的比例为权重值

3.GBDT当增加样本数量时,训练时长是线性增加吗?

  • NO,因为生成单颗决策树时,对于 损失函数极小值与样本数量N不是线性相关

4.GBDT中哪些部分可以并行?

  • 计算每个样本的负梯度时
  • 分裂挑选最佳特征及其分割点时,对特征计算相应的误差及均值时
  • 更新每个样本的负梯度时
  • 最后预测的过程当中,每个样本将之前的所有树的结果累加的时候

5.GBDT训练过程?

  • GBDT是通过多次迭代,每一次计算都是为了减小上一次的残差,为了消除残差,我们在残差减小的梯度方向上建立模型,即,在Gradient Boosting中,每个新建立的模型是为了使得之前的模型的残差往梯度负方向下降的方法,而在多次迭代过程中,每次迭代产生一个弱分类器,每个分类器基于上一轮分类器的残差进行训练。该弱分类器一般是比较简单,且要求是低方差高偏差。这是因为在训练过程中,该算法是在训练过程中通过降低偏差来不断提高最终分类器的精确度。
  • 弱分类器的选择是CART TREE,即分类回归树,由于弱分类器是低方差高偏差,每个分类回归树的深度不会很深。最终的总分类器是将每轮训练过程产生的弱分类器加权求和得到的(即上述加法模型)

6.GBDT算法中,所产生的树是分类树还是回归树?

  • GBDT的树会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树(尽管GBDT调整后可以用于分类但不代表GBDT的树是分类树)
  • 其实,GBDT算法的关键点在于如何使得损失函数尽可能快的减小。其核心是GB(Gradient Boosting) ,即使损失函数沿着梯度负方向下降。(为什么梯度负方向是下降最快的呢?请看博客“为什么梯度负方向是函数下降最快的?”)在GB算法中,利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一棵CART回归树。在GBDT每次迭代的过程,都去拟合一棵回归树。每轮训练都会使得损失函数尽可能快的减小,尽快的收敛达到局部最优解或全局最优解

7.GBDT如何生成回归树(如何选择特征)?

  • 在训练过程中,需要生成CART回归树,提醒一下,GBDT的弱分类器默认的是CART回归树,其实也可以选择其他的弱分类器,但前提是改弱分类器是低方差高偏差,且框架服从Boosting框架即可。接下来介绍一下回归树(一种二叉树)的生成过程
  • 其实,CART回归树的生成就是特征选择的过程。假设总共有N个特征。首先从中选择一个特征 i,作为二叉树的第一个分节点;然后对特征 i 的值选择一个切分点 n。如果一个样本的特征 i 的值小于 n,则分为一类,如果大于 n,则分为另一类。至此,就构建成功了一个回归树的一个节点,其他节点的生成一样。那么,如何选择特征 i 和特征 i 的切分点 n

8.RF(随机森林)与GBDT之间的区别与联系

相同点

  • 都是由多棵树组成,最终的结果都是由多棵树一起决定
  • RF和GBDT在使用CART树时,可以是分类树或者回归树

不同点

  • 组成随机森林的树可以并行生成,而GBDT是串行生成
  • 随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和
  • 随机森林对异常值不敏感,而GBDT对异常值比较敏感
  • 随机森林是减少模型的方差,而GBDT是减少模型的偏差
  • 随机森林不需要进行特征归一化。而GBDT则需要进行特征归一化

9.梯度提升和梯度下降的区别和联系是什么?

  • 下表是梯度提升算法和梯度下降算法的对比情况。可以发现,两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类

10.GBDT、XGBoost、lightgbm的区别?

  • XGBoost使用二阶泰勒展开表示梯度,即每棵树拟合的是二阶泰勒的梯度,相比GBDT的一阶泰勒展开、对梯度的表示更准确
  • XGBoost的损失函数中显式加入了正则项,对叶子数目和叶子权重做惩罚,更好抑制过拟合
  • lightgbm对遍历每个特征寻找最优分裂点时,将每个特征进行了分桶,比如可指定分为64个桶,那么该特征所有的值都落入这64个桶中,遍历这个特征时,最多只需要遍历64次,则每次分裂的复杂度为O(特征数*桶数),如果不分桶,则可能所有样本的值都不同,则复杂度为O(特征数*样本数)
  • 为什么能分桶:因为每棵树都是弱分类器,不需要非常精准,且分桶一定程度上提高了泛化能力,降低了误差。大规模LR、FM等模型对所有数值特征分桶也是一样的道理
  • lightgbm的分枝模式为leaf-wise,即遍历当前所有待分枝节点,不需要一定在最下边一层,谁的分裂增益大就分谁。而XGBoost的分枝模式为level-wise,即分完一层再分下一层,可能一层中有些叶子分裂增益极小,但是仍然要花费时间和空间去分裂

你可能感兴趣的:(机器学习,算法,人工智能)