zoukankan      html  css  js  c++  java
  • GBDT

    引自:https://blog.csdn.net/God_68/article/details/81747297?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

    一、GBDT算法

    1、算法简介

    GBDT,梯度上升决策树属于集成学习 (目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性)。GBDT是通过采用加法模型,其目的是通过不断减少训练过程中产生的残差来达到将数据进行分类回归的算法。

    2、GBDT训练过程

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

    弱分类器的选择是CART TREE,即分类回归树,由于弱分类器是低方差高偏差,每个分类回归树的深度不会很深。最终的总分类器是将每轮训练过程产生的弱分类器加权求和得到的(即上述加法模型)。

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

    解:GBDT的树会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树(尽管GBDT调整后可以用于分类但不代表GBDT的树是分类树)。

    其实,GBDT算法的关键点在于如何使得损失函数尽可能快的减小。其核心是GB(Gradient Boosting) ,即使损失函数沿着梯度负方向下降。在GB算法中,利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一棵CART回归树。在GBDT每次迭代的过程,都去拟合一棵回归树。每轮训练都会使得损失函数尽可能快的减小,尽快的收敛达到局部最优解或全局最优解。

    3、GBDT如何生成回归树(如何选择特征)?

     在训练过程中,需要生成CART回归树,提醒一下,GBDT的弱分类器默认的是CART回归树,其实也可以选择其他的弱分类器,但前提是改弱分类器是低方差高偏差,且框架服从Boosting框架即可。接下来介绍一下回归树(一种二叉树)的生成过程。

    其实,CART回归树的生成就是特征选择的过程。假设总共有N个特征。首先从中选择一个特征 i,作为二叉树的第一个分节点;然后对特征 i 的值选择一个切分点 n。如果一个样本的特征 i 的值小于 n,则分为一类,如果大于 n,则分为另一类。至此,就构建成功了一个回归树的一个节点,其他节点的生成一样。那么,如何选择特征 i 和特征 i 的切分点 n?

    最后总结一下GBDT算法的优缺点:

    (1)GBDT算法的优点有:

    可以灵活处理各种类型的数据,包括连续值和离散值。
    使用一些比较strong的损失函数,比如Huber损失函数和Quantile损失函数,对异常值的鲁棒性非常强
    相对于SVM来说,在相对较少的调参时间下,预测的准确度较高
    (2)GBDT算法的缺点: 

    由于弱学习器之间存在依赖关系,难以并行训练数据。 

  • 相关阅读:
    MHA 代码解析(online swtich+master is alive 模式)
    数据库的原理
    mysql performance schema的即时诊断工具-邱伟胜
    javascript 引擎Rhino源代码分析 浅析 实例函数对象及this
    perl dtrace2
    perl指针引用
    操作系统像还原 -BOOK
    [JavaScript]'this'详解
    功能丰富的 Perl:轻松调试 Perl
    PHP内核探索
  • 原文地址:https://www.cnblogs.com/lyp1010/p/12583126.html
Copyright © 2011-2022 走看看