Adaboost + CART

用 CART 决策树来作为 Adaboost 的基础学习器

但是问题在于,需要把决策树改成能接收带权样本输入的版本。(need: weighted DTree(D, u(t)) )

这样可能有点麻烦,有没有简单点的办法?尽量不碰基础学习器内部,想办法在外面把数据送进去的时候做处理,能等价于给输入样本权重。(boostrapping)

例如权重 u 的占比是30%的样本,对应的 sampling 的概率就设定为 0.3。

每一个基础学习器在整体模型中的重要性还是用 αt 来衡量(gt 在 G 中的系数)。另外,这个方法中仍然是 boosting, CART 一定不能太强(剪枝比较多、简单点就限制树高度;训练每棵树都只用一部分训练数据)

极端情况,限制树的高度只有1,那就直接退化成 decision stump ,也就不用做 sampling 了(因为几乎不会只用 stump 就能让 error rate = 0)

GBDT

梯度提升树(GBDT)也是一种前向分步算法,但基础模型限定了使用 CART 回归树。在学习过程中,第 t 轮迭代的目标是找到一个 CART 回归树 gt(x) 让本轮的损失函数 L(y, Gt(x)) = L(y, Gt-1(x) + gt(x)) 尽量小。

从 Adaboost 到 general boosting

负梯度拟合的优势就是可以在通用框架下拟合各种损失误差,这样分类回归都能做。在 ensemble https://www.cnblogs.com/chaojunwang-ml/p/11208164.html 分析过,这里再回顾一遍。

统一每次更新样本权重的形式(gt-1(x) 正确分类的样本权重减小,错误分类的样本权重增加)

那么根据递推公式,unT+1 可以从 un1 推得,而表达式中正好可以发现 G(x) 的 logit(voting score)。

而 yn * voting score 可以理解为点到分割平面的一种距离衡量,类似于 SVM 中的 margin,只不过没有归一化。而模型的训练目标就是想要让 margin 正的越大越好,等价于让 unT+1 越小越好。也就是说,adaboost 中所有样本的 un 之和会随着时间步推移越来越小(让每一个点的 margin 都越来越正、越来越大)。

这样就可以看出 adaboost 整体模型的要最小化的目标函数,是所有时间步的所有样本权重之和,即0/1损失函数的upper bound(指数损失函数)。

就用梯度下降(泰勒一阶展开)来实现这个最小化(不同的是,这里要求 loss 函数对 gt(x) 函数的梯度,approximate functional gradient)。把1/N拿进去,紫色部分凑成 unt ,对剩下的exp部分用泰勒公式一阶逼近,整理得到最终要对 h 求梯度的目标函数。

那就来看一下,发现最小化整体模型的目标函数,就等价于最小化 Einu(t) ,就是要优化基础分类器(也就是说,adaboost中前向分步训练基础分类器,其实正是在为整体模型的梯度下降优化找最好的gt(x) )

再来就是要确定学习率,能不能每步都找到一个最好的学习率(短期内比固定的学习率下降的快)?steepest descent:loss 对其求导并另为0。得到的最好的学习率,正是 adaboost 中的 αt

从梯度下降的角度再次总结 adaboost 做分类

gradient boosting

负梯度拟合的扩展,不只用指数损失函数,用其他的损失函数(符合平滑条件)也可以。从目前已经达到的 G(xn) ,向某一个方向(h(xn))走一小步(η),使得新的 logit 与给定的 yn 之间的某种 error 变小。

以平方误差举例,error = (s-y)2

如果在某处往某个方向走了一小步,就要乘上 gradient 在那个地方的分量(error 对 s 偏微分,在s处取值)。然后就是找一个 h,让下面式子的第二项越小越好(第一项与h无关)。直接的想法是:如果 s-y 是正的,就给一个负的 h ;如果 s-y 是负的,就给一个正的 h 。那么就让 h 取到 s-y 的负方向。

但 h 的大小呢?如果不加约束,h(xn) = - ∞ * (sn-yn) ,可是我们这里找 h 只是要找一个方向,所以步长靠 η 决定。加一个正则化惩罚项即可。然后凑一个 (h(xn) - (yn - sn))2 出来,配上一个和 h 无关的常数项。要最小化这个式子,就是要令 h(xn) 和 (yn - sn) 之间的均方误差最小,那就是以残差 residual 为目标训练一个回归器。

然后决定 η 的大小,单变量最优化问题。但这里除了求偏微分令其等于0,还有一种简洁的求法。把 gt(xn) 看成是feature,residual 看成简单线性回归的目标, 求这个一维的权重。

optimal η 的解为

加入 CART 作为 base learner,总结一下 GBDT

关于 GBDT 做分类的详解:https://www.cnblogs.com/pinard/p/6140514.html

梯度提升树 Gradient Boosting Decision Tree的更多相关文章

  1. Gradient Boosting Decision Tree学习

    Gradient Boosting Decision Tree,即梯度提升树,简称GBDT,也叫GBRT(Gradient Boosting Regression Tree),也称为Multiple ...

  2. GBDT(Gradient Boosting Decision Tree) 没有实现仅仅有原理

                阿弥陀佛.好久没写文章,实在是受不了了.特来填坑,近期实习了(ting)解(shuo)到(le)非常多工业界经常使用的算法.诸如GBDT,CRF,topic model的一些算 ...

  3. 论文笔记:LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    引言 GBDT已经有了比较成熟的应用,例如XGBoost和pGBRT,但是在特征维度很高数据量很大的时候依然不够快.一个主要的原因是,对于每个特征,他们都需要遍历每一条数据,对每一个可能的分割点去计算 ...

  4. GBDT(Gradient Boosting Decision Tree)算法&协同过滤算法

    GBDT(Gradient Boosting Decision Tree)算法参考:http://blog.csdn.net/dark_scope/article/details/24863289 理 ...

  5. Facebook Gradient boosting 梯度提升 separate the positive and negative labeled points using a single line 梯度提升决策树 Gradient Boosted Decision Trees (GBDT)

    https://www.quora.com/Why-do-people-use-gradient-boosted-decision-trees-to-do-feature-transform Why ...

  6. Gradient Boosting Decision Tree

    GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后也可以用于分类.当采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树,残差的意义如公式 ...

  7. 后端程序员之路 10、gbdt(Gradient Boosting Decision Tree)

    1.GbdtModelGNode,含fea_idx.val.left.right.missing(指向left或right之一,本身不分配空间)load,从model文件加载模型,xgboost输出的 ...

  8. 梯度提升树(GBDT)原理小结

    在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting De ...

  9. 梯度提升树(GBDT)原理小结(转载)

    在集成学习值Adaboost算法原理和代码小结(转载)中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boos ...

随机推荐

  1. Alink漫谈(二十) :卡方检验源码解析

    Alink漫谈(二十) :卡方检验源码解析 目录 Alink漫谈(二十) :卡方检验源码解析 0x00 摘要 0x01 背景概念 1.1 假设检验 1.2 H0和H1是什么? 1.3 P值 (P-va ...

  2. shrio总结

    AccessControlFilter(https://www.jianshu.com/p/9bfa22b0e905) SpringBoot+Shiro学习之自定义拦截器管理在线用户(踢出用户)   ...

  3. 利用 Python 写个七夕表白神器

    今天是七夕节,相比于现代人自创的 502,不对是 520,七夕才是中国传统意义上的情人节,本文分享几个 Python 表白程序,情侣可以现学现用,单身的话也可以先收藏一下,说不定下次就用上了. 很多人 ...

  4. android开发之集成zxing,二维码,以及扫描二维码的功能实现。带源代码下载

    package cc.jiusansec.www; import com.google.zxing.WriterException; import com.zxing.activity.Capture ...

  5. 初级知识点二——C#值传递

    C#中有值传递和引用传递,这个东西一直有点儿绕,今天花点儿时间来把这个事情搞清楚. 传递值类型的参数 值类型的变量,是直接包含其数据的.实际上,在向方法传递一个值类型变量,其实就意味着向方法传递了一个 ...

  6. D - 英文题 (多组背包)

    The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a gian ...

  7. [BUUOJ记录] [CISCN 2019 初赛]Love Math & [NESTCTF 2019]Love Math 2

    主要考察利用已有函数构造危险函数绕过,实现RCE. 进入题目给出源码: <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isse ...

  8. vueRooter的总结

    这一周学习了Vue的脚手架的结构,最重要的router 该进行总结和回忆了. 1首先是router的安装,用npm命令npm install vue-router --save 2装完后,在main. ...

  9. 【阿里云训练营】python查漏补缺 1

    文章来自:微信公众号[机器学习炼丹术]. 有问题疑惑,或者想交流交朋友的可以加个人微信:cyx645016617 参考目录: 目录 1 注释 2 is 与 == 3 运算优先级 4 查找所有属性和方法 ...

  10. 干货:不同场景容器内获取客户端源IP的方法

    摘要:客户端和容器服务器之间可能存在多种不同形式的代理服务器,那容器中如何获取到客户端真实的源ip呢? k8s已经成为当今容器化的标准,人们在享受容器带来的高效与便利的同时,也遇到一些烦恼:客户端和容 ...