zoukankan      html  css  js  c++  java
  • 集成学习(四):GBDT

    GBDT算法:

           所谓的GBDT(Gradient Boost Desicison Tree)就是值在每一步迭代时我们难以真正求得一个新的模型使得其加上原有模型得到的损失最小,但是我们可以用所谓的梯度下降法使得损失减小。

           输入:训练数据集$D+lbrace(x_{1},y_{1}),...,(x_{N},y_{N}) brace$,$x_{i}inmathbb{R}^{P}$,$y_{i}inmathbb{R}$; 损失函数$l(f(x),y)$; 正整数$M$;

           输出:某回归模型

          Step1. 令$f_{0}=argmin_{c}sum_{i=1}^{N}l(c,y_{i})$

          Step2. $m=1,...,M$, 执行:

                1) 计算$g_{m,i}=partial_{1} l(f_{m-1}(x_{i}),y_{i})$;

                2) 对数据$lbrace(x_{1},-g_{m,1}),...,(x_{N}-g_{m,N}) brace$ 用CART算法进行拟合,得到一回归树,并且对每个叶节点得到一个叶节点区域$R_{mj},$

    $j=1,...,J$;

                3) 计算: egin{equation}c_{mj}=argmin_{c}sum_{x_{i}in R_{mj}}l(f_{m-1}(x_{i})+c, y_{i})end{equation}

                4) 令:

                                egin{equation}f_{m}=f_{m-1}+c_{mj}I(lbrace xin R_{mj} brace)end{equation}

          Step3. 输出$f_{M}$

    学习率收缩shrinkage

           为了防止过拟合,也为了给后续的弱学习器留下更多学习空间,我们可以选择某个常数$ uin(0,1)$ 甚至是一个单调递减的数列$lbrace u_{m}in(0,1) brace_{m=1}^{M}$来作为学习率,具体说来就是在上述算法的Step2的4)中令:

                        egin{equation}f_{m}=f_{m-1}+ u c_{mj}I(lbrace xin R_{mj} brace)end{equation}

    或者:

                        egin{equation}f_{m}=f_{m-1}+ u_{m} c_{mj}I(lbrace xin R_{mj} brace)end{equation}

          

          一般说来,更低的学习率意味着更高的运算开销,我们应该选择更大的$M$, 在实践中我们一般选择学习率$ uleq 0.1$,而如果选择的学习率过大的话模型会很快过拟合。

    子采样subsampling,袋外误差,特征重要性

          GBDT也可以每次随机采样若干样本而不是样本总体进行训练,我们在随机森林,Baggging算法中已经看到,子采样有助于减小模型方差,同时我们也可以计算袋外误差。和随机森林一样,我们也可以得到特征的重要性。

          

     参考文献

    [1] Trevor Hastie,Robert Tibshirani,Jerome Friedman: The Elements of Statistical Learning Data Mining,Inference,and Prediction, second edition, Springer Verleg, 2009

  • 相关阅读:
    ES6扩展
    javascript当中prototype用法
    三列浮动中间宽度自适应
    介绍axios和promise
    JS高级---实例对象和构造函数之间的关系
    JS-数组常用方法整理
    原生JS轮播图
    JavaScript 开胃菜
    JS高级---遍历DOM树
    JS高级---正则表达式练习身份证号码
  • 原文地址:https://www.cnblogs.com/szqfreiburger/p/11689676.html
Copyright © 2011-2022 走看看