zoukankan      html  css  js  c++  java
  • 梯度提升树:负梯度和残差

    1 提升树模型

    提升树是以分类树和回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。

    提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法。以决策树为基函数的提升方法称为提升树(boosting tree)。

    1. 提升树模型可以表示为决策树的加法模型

    [f_M(x) = sum_{m=1}^{M}T(x; Theta_m) ]

    其中, (T(x; Theta_m)) 表示决策树;(Theta_m) 为决策树的参数;(M) 为树的个数。

    1. 提升树算法采用前向分布算法

    首先确定初始提升树 (f_0(x) = 0) ,第 (m) 步的模型是

    [f_m(x) = f_{m-1}(x) + T(x; Theta_m) ]

    其中,(f_{m-1}(x)) 为当前模型,通过经验风险极小化确定下一棵决策树的参数 (Theta_m)

    [hat{Theta}_m = arg min_{Theta_m} sum_{i=1}^{N}L(y_i, f_{m-1}(x_i) + T(x_i; Theta_m)) ]

    不同问题的梯度提升树学习算法,其主要区别在于使用的损失函数不同。

    1. 用平方误差损失函数的回归问题;

    2. 用指数损失函数的分类问题;

    3. 用一般损失函数的一般决策问题。

    2 负梯度和残差

    梯度提升模型的求解过程是梯度下降在函数空间的优化过程。

    残差是负梯度在损失函数为平方误差时的特殊情况。

    1. 我们希望找到一个 (f(x)) 使得 (L(y, f(x))) 最小,当前我们得到 (f_{m-1}(x)),如果想得到更优的 (f(x)),根据梯度下降法进行迭代,(f(x)) 就得沿着使损失函数 (L) 减小的方向变化。

    [egin{align} f_m(x) = f_{m-1}(x) - eta frac{partial{L(y, f_{m-1}(x))}}{partial{f_{m-1}(x)}} end{align} ]

    其中,(eta) 为学习率,(frac{partial{L(y, f_{m-1}(x))}}{partial{f_{m-1}(x)}}) 为损失函数 (L) 对未知函数的偏导 (frac{partial{L(y, f(x))}}{partial{f(x)}})(f_{m-1}(x)) 处的值。

    同时,最新学习器是由当前学习器 (f_{m-1}(x)) 与本次要生成的回归树 (T_m(x)) 相加得到

    [egin{align} f_m(x) = f_{m-1}(x) + eta T_m end{align} ]

    因此,为了让损失函数减小,根据式(1)和(2)知,可以取

    [T_m(x) = - frac{partial{L(y, f_{m-1}(x))}}{partial{f_{m-1}(x)}} ]

    因此,我们可以使用损失函数对 (f(x)) 的负梯度 $$- frac{partial{L(y, f_{m-1}(x))}}{partial{f_{m-1}(x)}}$$ 来拟合新的回归树 (T_m(x)).

    1. 当损失函数为平方损失时,即

    [L(y, f(x)) = frac{1}{2}ig(y - f(x) ig)^2 ]

    损失函数的负梯度为

    [- frac{partial{L(y, f(x))}}{partial{f(x)}}Big|_{f_{m-1}(x)} = - frac{partial{L(y, f_{m-1}(x))}}{partial{f_{m-1}(x)}} = y - f_{m-1}(x) ]

    这里, (y - f_{m-1}(x)) 是当前模型拟合数据的残差(residual)。所以,对回归问题的提升树来说,只需要简单的拟合当前模型的残差。

    最后,准确的说,不是负梯度代替残差,而是损失函数是平方损失时,负梯度刚好是残差,残差只是特例。

    参考

    1. 《统计学习方法》 李航

    2. 《GBDT算法原理与系统设计简介》 wepon

  • 相关阅读:
    Eclipse 修改maven 仓储Repository位置
    使用Eclipse构建Maven的SpringMVC项目
    The word is not correctly spelled问题解决
    navicat for mysql 显示中文乱码解决办法
    Missing artifact net.sf.json-lib:json-lib:jar:2.2.3:compile
    ApacheTiles实战
    使用Apache Tiles3.x构建界面布局
    SpringMVC整合Tiles框架
    最近遇到的问题
    Unity3D流行的游戏开发人员构建高速检查站系统
  • 原文地址:https://www.cnblogs.com/shaocf/p/14411034.html
Copyright © 2011-2022 走看看