美文网首页
GBDT原理详解及sklearn源码解析

GBDT原理详解及sklearn源码解析

作者: 26cfa0f175f8 | 来源:发表于2020-03-27 10:02 被阅读0次

    以下关于GBM和GBDT的理解来自经典论文[greedy function approximation: a gradient boosting machine],by Jerome H.Friedman,(https://github.com/LouisScorpio/datamining/tree/master/papers)

    论文的整体思路:
    1.函数空间的数值优化
    对算法中损失函数的数值优化不是在参数空间,而是在函数空间,数值优化方式为梯度下降;
    2.GBM
    以加法模型为基础,使用上述优化方法,构建一套通用梯度提升算法GBM;
    3.不同损失类型的GBM
    具体展现使用不同类型的损失时的GBM;
    4.GBDT
    以CART回归树为加法模型的弱分类器,构建算法模型即GBDT。

    函数空间的数值优化

    首先,考虑加法模型,即最终分类器是由多个弱分类器线性相加的结果,表示为以下形式:
         F(x;\left \{\beta_{m}, a_{m} \right \}_{1}^{M}) = \sum_{m=1}^{M}\beta _{m}h(x;a_{m})      (1)
    其中,h(x;a)是弱分类器,是关于输入特征x的函数,a是函数的参数(如果h(x;a)为回归树,那么a就是回归树中用于分裂的特征、特征的分裂点以及树的叶子节点的分数),M是弱分类器的数量,\beta为弱分类器的权重(在GBDT中相当于learning_rate,即起到shrinkage的作用)。

    参数空间的数值优化

    假设预测的目标函数为F(x; P),其中P为参数,损失为L,那么损失函数表示为:
            \Phi (\mathbf{P}) = E_{y,x}L(y,F(\mathbf{x};\mathbf{P}))
    对应参数P的最优解表示为:
              \mathbf{P} = arg\underset{\mathbf{P}}{min}\Phi (\mathbf{P})
    考虑使用梯度下降的优化方式,首先计算损失函数\Phi (P)对参数P的梯度\mathbf{g}_{m}:
             \mathbf{g}_{m} =\left [ \frac{\partial \Phi (\mathbf{P})}{\partial P} \right ] _{\mathbf{P}=\mathbf{P}_{m-1}}
    然后,对参数P沿着负梯度方向即-\mathbf{g}_{m}方向更新,更新的步长为:
               \mathbf{p}_{m} = -\rho _{m}\mathbf{g}_{m}
    其中\rho_{m}是在负梯度方向上更新参数的最优步长,通过以下方式线性搜索得到:
           \rho _{m} = arg\underset{\rho}{min}\Phi (\mathbf{P}_{m-1}-\rho\mathbf{g}_{m})
    从初始值p_{0}开始,经过多次这样的更新迭代之后,参数P的值最终为:
            \mathbf{P}_{m} = \sum_{i=0}^{m}\mathbf{p}_{i} = \sum_{i=0}^{m}-\rho_{i}\mathbf{g}_{i}
    以上为参数空间的数值优化。

    函数空间的数值优化

    在函数空间,假设预测的目标函数为F(x),损失为L,那么损失函数表示为:
            \Phi (\mathbf{F(\mathbf{x})}) = E_{y,x}L(y,F(\mathbf{x}))
    注意,这里损失函数的参数不再是P,而是函数F(\mathbf{x})
    按照梯度下降的优化方式,这里要计算损失函数\Phi (F(\mathbf{x}))对函数F的梯度\mathbf{g}_{m}:
         \mathbf{g}_{m}(\mathbf{x}) =\left [ \frac{\partial \Phi (\mathbf{F(\mathbf{x})})}{\partial F(\mathbf{x})} \right ] _{\mathbf{F(\mathbf{x})}=\mathbf{F}_{m-1}(\mathbf{x})}
    然后对函数沿着负梯度方向更新,更新的步长如下:
             f_{m}(\mathbf{x}) = -\rho _{m}\mathbf{g}_{m}(\mathbf{x})
    其中\rho_{m}是在负梯度方向上更新参数的最优步长,通过以下方式线性搜索得到:
       \rho _{m} = arg\underset{\rho}{min}E_{y,\mathbf{x}}\mathbf{L}(y, \mathbf{F}_{m-1}(\mathbf{x})-\rho g_{m}(\mathbf{x}))
    经过多次迭代之后,最终的函数结果为:
             \mathbf{F}_{m}(\mathbf{x}) = \sum_{0}^{m}f_{i}(\mathbf{x})

    GBM

    考虑(1)中的加法模型形式,可以得到
          \mathbf{F}_{m}(\mathbf{x}) = \mathbf{F}_{m-1}(\mathbf{x}) + \beta _{m}h(\mathbf{x};\mathbf{a}_{m})
    假设损失为L,那么
    (\beta _{m}, \mathbf{a}_{m}) = arg\underset{\beta ,\mathbf{a}}{min}\sum_{i=1}^{N}\mathbf{L}(y_{i}, \mathbf{F}_{m-1}(\mathbf{x}_{i}) + \beta h(\mathbf{x}_{i};\mathbf{a}))
    根据函数空间的数值优化,h(\mathbf{x};\mathbf{a})应该对应于负梯度:
        -g_{m}(\mathbf{x}) = -[\frac{\partial \mathbf{L}(y, \mathbf{F}(\mathbf{x}))}{\partial \mathbf{F}(\mathbf{x})}]_{\mathbf{F}(\mathbf{x})=\mathbf{F}_{m-1}(\mathbf{x})}
    在模型训练时,负梯度-g_{m}(\mathbf{x})是基于样本点进行的估计,为了提高泛化能力,一种可行的解决办法是让h(\mathbf{x};\mathbf{a})去拟合负梯度-g_{m}(\mathbf{x}),由此得到:
        \mathbf{a}_{m} = arg\underset{\mathbf{a},\beta }{min}\sum_{i=1}^{N}[-g_{m}(\mathbf{x}_{i})-\beta h(\mathbf{x}_{i};\mathbf{a})]^{2}
    拟合学习到的h(\mathbf{x};\mathbf{a})作为加法模型的弱学习器。加法模型的步长通过线性搜索的方式得到:
      \rho _{m} = arg \underset{\rho}{min}\sum_{i=1}^{N}\mathbf{L}(y_{i}, \mathbf{F}_{m-1}(\mathbf{x}_{i}) + \rho h(\mathbf{x}_{i};\mathbf{a}_{m}))
    综上,GBM整个算法流程如下:

    1. 初始化:\mathbf{F}_{0}(\mathbf{x}) = arg \underset{\rho}{min}\sum_{i=1}^{N}\mathbf{L}(y_{i}, \rho)
    2. For m = 1 to M do:
      3.\tilde{y}_{i} = -[\frac{\partial \mathbf{L}(y_{i}, \mathbf{F}(\mathbf{x}_{i}))}{\partial \mathbf{F}(\mathbf{x}_{i})}]_{\mathbf{F}(\mathbf{x})=\mathbf{F}_{m-1}(\mathbf{x})}, i = 1, 2, \cdots , N
      1. \mathbf{a}_{m} = arg\underset{\mathbf{a},\beta }{min}\sum_{i=1}^{N}[\tilde{y}_{i}-\beta h(\mathbf{x}_{i};\mathbf{a})]^{2}
      2. \rho _{m} = arg \underset{\rho}{min}\sum_{i=1}^{N}\mathbf{L}(y_{i}, \mathbf{F}_{m-1}(\mathbf{x}_{i}) + \rho h(\mathbf{x}_{i};\mathbf{a}_{m}))
      3. \mathbf{F}_{m}(\mathbf{x}) = \mathbf{F}_{m-1}(\mathbf{x}) + \beta _{m}h(\mathbf{x};\mathbf{a}_{m})
      4. endFor
        end Algorithm

    相关文章

      网友评论

          本文标题:GBDT原理详解及sklearn源码解析

          本文链接:https://www.haomeiwen.com/subject/rzefzctx.html