zoukankan      html  css  js  c++  java
  • Boosting决策树:GBDT

    GBDT (Gradient Boosting Decision Tree)属于集成学习中的Boosting流派,迭代地训练基学习器 (base learner),当前基学习器依赖于上一轮基学习器的学习结果。 不同于AdaBoost自适应地调整样本的权值分布,GBDT是通过不断地拟合残差 (residual)来“纠错”基学习器的。

    1. Gradient Boosting

    Gradient Boosting Machine (GBM) 是由大牛Friedman [1,2] 提出来,基本思想非常简单:基学习器存在着分类/回归错误的情况,在下一轮基学习器学习时努力地纠正这个错误。在回归问题中,这个错误被称为残差。比如,在学习样本((x, y))得到一个模型(f),预测值为(hat{y} = f(x));那么残差则为:

    [y - hat{y} = y- f(x) ]

    如果定义损失函数为平方损失(frac{1}{2}(y-f(x))^2),那么其梯度为

    [frac{partial frac{1}{2}(y-f(x))^2}{partial f(x)} = f(x) - y ]

    可以发现:残差为负梯度方向。对于平方损失,每一步优化是很简单的;但是,对于其他损失函数呢?Friedman利用负梯度近似残差,将Gradient Boosting推广到一般损失函数(L(y, x))。步骤如下:

    (1) 计算伪残差 (pseudo-residual),

    [r_{im} = - left[ frac{partial L(y_i, f(x_i))}{partial f(x_i)} ight]_{f = f_{m-1}} ]

    (2) 基学习器(h_m(x))拟合样本({ (x_i, r_{im}) })
    (3) 计算最优乘子 (multiplier) (gamma_m),使得

    [gamma_m = mathop{arg min} limits_{gamma} sum_{i} L(y_i, f_{m-1}(x) + gamma h_m(x_i)) ]

    (4) 更新模型

    egin{equation}
    f_m(x) = f_{m-1}(x) + gamma_m h_m(x)
    label{eq:update}
    end{equation}

    如此迭代,直至结束或模型收敛;最后一步得到的模型(f_M(x))即为GBM的最终模型。

    2. GBDT

    如果基学习器为决策树时,GBM则被称为GBDT。决策树本质上是对特征空间的划分({ R_{jm} }),因此基学习器(h_m(x))可改写为

    [h_m(x) = sum_j b_{jm} I(x in R_{jm}) ]

    其中,(b_{jm})为预测值,(I(.))为指示函数。那么,式子eqref{eq:update}可以改写为

    [f_m(x) = f_{m-1}(x) + sum_j gamma_{jm} I(x in R_{jm}) ]

    GBDT的算法步骤如下图所示(图片来自于 ESL [3]):

    为了减小过拟合,通过Shrinkage的方式:

    [f_m(x) = f_{m-1}(x) + upsilon cdot gamma_m h_m(x) ]

    其中,(upsilon)称之为学习率 (learning rate)。经验表明:当学习率(upsilon < 0.1)时,泛化能力远远超过没有Shrinkage的模型(即(upsilon =1))。但是,低学习率同时也带来了更多的迭代次数。

    sklearn包GradientBoostingRegressor实现了回归GBDT(分类用GradientBoostingClassifier),参数如下

    loss: 损失函数,默认为平方损失ls
    learning_rate: 学习率
    n_estimators: 基学习器数目
    max_depth: 决策树的最大深度
    max_features: 最多特征数
    

    3. 参考资料

    [1] Friedman, Jerome H. "Greedy function approximation: a gradient boosting machine." Annals of statistics (2001): 1189-1232.
    [2] Friedman, Jerome H. "Stochastic gradient boosting." Computational Statistics & Data Analysis 38.4 (2002): 367-378.
    [3] Trevor Hastie, Robert Tibshirani, Jerome H. Friedman. The elements of statistical learning. Springer, Berlin: Springer series in statistics, 2009.
    [4] Cheng Li, A Gentle Introduction to Gradient Boosting.

  • 相关阅读:
    Team Foundation Sidekicks 2010
    Asp.net页面传值的方式汇总
    轻量级IOC框架Ninject使用
    AutoMapper使用简单总结
    页面请求的方式(Get与Post)
    总结2012 规划2013
    在reset css后两个input之间还是出现默认间隔的问题。
    js学习笔记事件委托
    程序猿工具——svn
    JS 事件添加onclick写法注意。
  • 原文地址:https://www.cnblogs.com/en-heng/p/6927620.html
Copyright © 2011-2022 走看看