zoukankan      html  css  js  c++  java
  • GBDT

    一、流程

    基函数线性加权和得到最终的强分类器。每轮迭代得到一个弱分类器,这个分类器是在上一轮的残差基础上得到的。本轮就是要找一个cart树,使得本轮的损失函数值更加的小。

    二、如何选择特征(就是如何生成cart树)

    回归树:平方误差和最小化,对于特征A=a时,集合D的误差最小时,就选择这个特征值最为切分点。

    分类树:使用基尼系数,计算对于特征A=a时,集合D的基尼指数最小时,就选择这个特征最为切分点。

    三、如何构建特征?

    GBDT本身不能产生特征的,产生的是特征的组合。

    例如用gbdt生成两颗子树(cart回归树),一共5个叶子节点,那么将一个样本放入到这两个子树中,肯定会在这两个子树的某一个叶子节点输出,最后有两个输出。令输出的叶子节点为1,否则为0,那么组成的向量就是[0,1,1,0,0],这就是特征的组合后的向量,再将这个和原来的特征一起输入的逻辑回归函数中进行训练,最后的效果得到了提升,而不用全都是人工设定的特征了。

    四、损失函数拟合?

    用损失函数的负梯度去拟合本轮损失值(残差)的近似值,进而去拟合一颗cart回归树

    五、如何用于分类呢?

    更改损失函数就行了。使用指数损失函数、对数似然函数等。

    六、优缺点

    灵活处理各种类型数据;

    调参时间少,且准确率高;

    使用健壮的损失函数,对异常值的鲁棒性很强;

    七、GBDT为什么比神经网络计算性能好?

    boost是降低偏差,在很弱的弱分类器上就能够得到和强大的强分类器。bagging是降低方差,在神经网络上用的多。

    神经网络是bagging,而且是bp算法,bp算法是基于梯度下降法的,所以在计算过程中是非常复杂的,梯度要累乘,计算量很大,但是gbdt每次迭代都是在上一轮的迭代基础上进行更新的,而且每个cart树神很浅的,因为是很简单的弱分类器,所以相应的计算量没有这么通过bp算法计算的计算量大。

  • 相关阅读:
    记录s标签范例
    链表问题总结
    Hibernate学习总结
    HDU2460-Network
    CF464C-Substitutes in Number
    CF666E-Forensic Examination
    CF373C-Counting Kangaroos is Fun
    CF558E-A Simple Task
    HDU5669-Road
    CF341D-Iahub and Xors
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11337014.html
Copyright © 2011-2022 走看看