《机器学习技法》学习笔记11——GBDT

作者: 033a1d1f0c58 | 来源:发表于2017-08-20 22:55 被阅读114次

    http://blog.csdn.net/u011239443/article/details/77435463

    Adaptive Boosted Decision Tree

    关于AdaBoost、提升树可先参阅:http://blog.csdn.net/u011239443/article/details/77294201
    这里仅对其做一定的补充。
    对提升决策树桩的模型中,我们对树的节点进行分隔时,需要该节点中的各个数据的权重来计算总错误:

    weightedError = D.T * errArr
    

    树根比较好算,数据都是全量的数据,但是如果是非根的叶节点呢?这就是困难了。于是,我们就想到了变动数据集方法:



    比如说,某条数据的权重是0.1,我们就似的样本抽取到它的概率变为0.1。

    AdaBoost优化背后的意义

    $u_n{t+1}$为第n个数据,t+1轮优化的权重



    我们把上述橙色部分叫做voting score

    我们回过头来看模型,并套用SVM的形式:

    套用SVM,我们可知我们需要对模型的优化是:

    于是,我们得到了AdaBoost的损失函数:

    使用梯度下降的方法,调整最后g(也就是h),来最小化误差:


    使用泰勒展开:

    使得损失函数等价为:

    于是,我们只需最小化:

    得到:


    我们可以看到,我们选择的h是要使得其预测率最小则结果最优。这就把问题转移到了函数h的最优化的问题了,这就变成了我们非常熟悉的问题,比如 如果是 AdaBoost Decision Tree,那就用决策树回归最优化h就行了。

    然后我们来调整 η,设$g_t$就是我们的最优化h,那么最优化问题变成了:

    我们对其求导,最优化得到:

    对,没有错!AdaBoost中的 α 的含义其实就是在最优化g函数梯度下的最优化的步长!

    Gradient Boosting

    我们上节套用SVM来得出Adaboost的损失函数:

    但其实我们可以用其他误差来得出损失函数,这就是叫做Gradient Boosting,通常使用差方来得到:

    对上式进行关于S在$S_n$上泰勒展开:


    即上式中 x = s , $x_0 = Sn$得到了:

    由于我们想让η来调节步长,而h函数只是决定方向,所以需要让$h(x)$为负数,但是绝对值又要尽可能的小,于是优化问题变成了:

    可以看出我们的h其实是最优化回归:

    也就是说,h是想把输入特征,回归拟合输出为实际值和上一轮模型预测值差值。

    同样的,假设我们已经找到最佳的回归函数g,接下来调整η:

    可以看到,这也是一个简单的一元回归:

    总结GBDT模型如下:

    总结集成模型

    bagging 和 boosting 加上 决策树 可以分别得到:

    为什么集成方法效果好?因为它有很多不同的模型表示,所以表达能力非常好,避免的欠拟合;而又是因为有很多模型混合,所以避免的某些模型的过拟合。

    这里写图片描述

    相关文章

      网友评论

        本文标题:《机器学习技法》学习笔记11——GBDT

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