阿弥陀佛,好久没写文章,实在是受不了了,特来填坑,最近实习了(ting)解(shuo)到(le)很多工业界常用的算法,诸如GBDT,CRF,topic model的一些算法等,也看了不少东西,有时间可以详细写一下,而至于实现那真的是没时间没心情再做了,等回学校了再说吧。今天我们要说的就是GBDT(Gradient Boosting Decision Tree)

=======================================================================

〇.前序

GBDT是看一个大牛团队做推荐算法比赛的时候拿这个模型来处理最后得到的所有的feature并输出结果的模型,想到自己以前天真地拿着SVD单模型调参参加这类比赛的时候真是……闻者伤心,听着流泪啊,别的不谈,这次讲GBDT主要是因为了解GBDT的一些前置条件我都在博客里写过,可以直接跳到关键部分开写……进入正题吧

一.前置条件

1.决策树

参看我以前的一篇博客:http://blog.csdn.net/dark_scope/article/details/13168827

虽然里面写的都是决策分类树,而我们这次主讲的是决策回归树,不过其实都差不多,决策回归树呢就是把分到某个分支上的所有训练样例的目标值求平均或者取中位数返回而已。

2.boosting

一般来说哦讲boosting都以adaboost这个特例开始讲,所以你可以先看一看我的这篇博客:AdaBoost--从原理到实现

然后我们来接着讲boosting……新开一章吧,这个其实是主要内容

二.boosting 提升方法

提升方法其实是一个比adaboost概念更大的算法,因为adaboost可以表示为boosting的前向分布算法(Forward stagewise additive modeling)的一个特例,boosting最终可以表示为:

其中的w是权重,Φ是弱分类器(回归器)的集合,其实就是一个加法模型(即基函数的线性组合)

前向分布算法 实际上是一个贪心的算法,也就是在每一步求解弱分类器Φ(m)和其参数w(m)的时候不去修改之前已经求好的分类器和参数:

(图自《统计学习方法》)

为了表示方便,我们以后用β代替w进行描述了,图中的b是之前说的Φ弱分类器

OK,这也就是提升方法(之前向分布算法)的大致结构了,可以看到其中存在变数的部分其实就是极小化损失函数 这关键的一步了,如何选择损失函数决定了算法的最终效果(名字)……这一步你可以看出算法的“趋势”,以后再单独把“趋势”拿出来说吧,因为我感觉理解算法的关键之一就是理解算法公式的“趋势”

三.各种提升方法

不同的损失函数和极小化损失函数方法决定了boosting的最终效果,我们现在来说几个常见的boosting:

(图自 Machine Learning A Probabilistic Perspective)对于二分类问题来说:其中πi=sigm(2f(xi)) ,y~i∈{-1,+1},yi∈{0,1}

广义上来讲,所谓的Gradient Boosting 其实就是在更新的时候选择梯度下降的方向来保证最后的结果最好,一些书上讲的“残差” 方法其实就是L2Boosting吧,因为它所定义的残差其实就是L2Boosting的Derivative,接下来我们着重讲一下弱回归器(不知道叫啥了,自己编的)是决策树的情况,也就是GBDT。(不知道为何上表的Absolute被命名为了Gradient boosting,关于Gradient boosting在后面会有更细致的介绍)

四.GBDT

对于决策树,其实可以把它表示为下式,即是把特征空间划分为多个区域,每个区域返回某个值作为决策树的预测值

其中Rj是区域,γ是返回值,I()在其中的条件成立情况下为1,否则为0.其中的参数J可以大概看做树的深度的一个表示,这是一个待调的参数

我们知道Gradient Boosting最重要的一步就是去拟合下式:

对于不同的Loss function,其梯度有不同的表达式:

(图自The Elements of Statisic Learning)

前三种对应的loss function如下图:其中Huber是低于某个值表现为square error,高于某个值则表现为线性

下面是GBDT的大概框架:(Gradient Tree Boosting应该是GBDT另一种说法,有误请指正)

(算法自The Elements of Statistical Learning )

整个框架描述得其实已经很清晰了,就不在这里赘述了,总之所谓Gradient就是去拟合Loss function的梯度,将其作为新的弱回归树加入到总的算法中即可。

五.尾巴

本文大概写了一下GBDT的框架和原理,后续其实还有涉及到参数的选择(如树的深度),正则化(regularization)等内容,主要是在实现的时候要注意,有时间会写一份toy代码出来。

【Reference】

【1】《The Elements of Statistical Learning 》

【2】《统计学习方法》

【3】《Machine Learning A Probabilistic Perspective》

GBDT(Gradient Boosting Decision Tree)相关推荐

  1. GBDT(Gradient Boosting Decision Tree

     GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由 ...

  2. 复盘:GBDT,梯度提升决策树,Gradient Boosting Decision Tree,堪称最好的算法之一

    复盘:GBDT,梯度提升决策树,Gradient Boosting Decision Tree,堪称最好的算法之一 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以 ...

  3. Gradient Boosting Decision Tree学习

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

  4. 机器学习论文:《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》

    翻译自<LightGBM: A Highly Efficient Gradient Boosting Decision Tree> 摘要 Gradient Boosting Decisio ...

  5. Lightgbm源论文解析:LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    写这篇博客的原因是,网上很多关于Lightgbm的讲解都是从Lightgbm的官方文档来的,官方文档只会告诉你怎么用,很多细节都没讲.所以自己翻过来Lightgbm的源论文:LightGBM: A H ...

  6. 《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》论文笔记

    1 简介 本文根据2017年microsoft研究所等人写的论文<LightGBM: A Highly Efficient Gradient Boosting Decision Tree> ...

  7. 『 论文阅读』LightGBM原理-LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    17年8月LightGBM就开源了,那时候就开始尝试上手,不过更多还是在调参层面,在作者12月论文发表之后看了却一直没有总结,这几天想着一定要翻译下,自己也梳理下GBDT相关的算法. Abstract ...

  8. LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    论文杂记 图像检索--联合加权聚合深度卷积特征的图像检索方法 主目录 下一篇 文章结构 lightgbm原理 [前言] LightGBM: A Highly Efficient Gradient Bo ...

  9. 机器学习中的算法:决策树模型组合之GBDT(Gradient Boost Decision Tree)

    转载自:http://blog.csdn.net/holybin/article/details/22914417 前言 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速 ...

  10. 机器学习——Gradient Boost Decision Tree(Treelink)

    转载自:http://blog.csdn.net/yangtrees/article/details/7506052 1.      什么是Treelink Treelink是阿里集团内部的叫法,其学 ...

最新文章

  1. manjaro无效的软件包
  2. 【Latex】一些使用
  3. mysql near_完美解决 ERROR 1064 (42000): You have an error in your SQL syntax ... near …
  4. oracle SQL性能优化
  5. python采集_Python采集实例2
  6. 4.Eclipse的安装和使用
  7. 施密特出售Google股票套现3.27亿美元
  8. LeetCode求能够装得最多的水
  9. 【dp】CF17C. Balance
  10. kafka分区与分组原理_Kafka工作原理
  11. ic 卡获取帐号apdu指令_《全球行动》携手京东校园送福利 1000元京东卡等你拿
  12. [已解决]罗技鼠标驱动打不开问题
  13. 活动报名场地预约自定义表单小程序开发
  14. 木马病毒能损害计算机硬盘么,电脑病毒危害有哪些【图文】
  15. JAVA百度贴吧签到器
  16. 微信小程序中相机api_微信小程序调用内置照相机实现拍照及图片上传
  17. Windows使用思岚科技的rpLidar的A2型号
  18. PostgreSQL下载、安装和配置使用
  19. Weekly Recap!相对不平淡的行情 相对冷淡的 DeFi 市场
  20. Python基础操作(2)

热门文章

  1. 【Android 】【Monkey Demons】 针对性的进行稳定性测试
  2. Maven_1 安装配置
  3. Java定时任务的三种实现方法
  4. 借助mapshaper的简化来修复geojson的拓扑错误
  5. 对代码更有信心--单元测试工具Mockito简单介绍
  6. Android基础-Content Provider
  7. 为什么短信会在未来几年消亡
  8. IntelliJ IDEA 无法导入HttpServlet包解决方法
  9. c语言字符串注入命令,C语言基础之输入输出、常量定义、随机数、动态链接库的注入、数据类型介绍、goto语句的使用...
  10. 5000并发的qps是多少_高并发和高性能系统中进程、线程、协程、队列(如何调度的)...