python梯度提升回归树_梯度提升回归树(GBDT)

2023-11-20

梯度提升回归树(GBDT)

发布时间:2018-08-30 13:22,

浏览次数:1024

, 标签:

GBDT

一.从Boosting思想开始

1.梯度提升回归树是一种从它的错误中进行学习的技术。它本质上就是集思广益,集成一堆较差的学习算法进行学习。

2.GBDT是基于Boosting思想的,Adaboosting是最著名的Boosting算法,其基本思想是使用多个弱分类器来构建一个强分类器。

3.Adaboosting构造方法是一个迭代的过程,大致思路是:

*针对同一个训练集训练多层的弱分类器,每层使用训练集训练一个弱分类模型,我们从训练出的模型中得到预测结果。

*之后根据训练集中样本分类是否正确、总体分类的准确率来确定每个样本上应重新分配的权值,将修改过权重后的新数据集训练一个下层的分类器

*这样不断进行训练直到有很少的错分样本,最后将每层的分类器有权重分配的融合在一起,这样下来就组成了最终的决策分类器。

可以简化上述过程为:

4.每次迭代需要三次计算,

*一次计算分类误差率(w是每次的权重):

*第二次计算分配给当前分类器的系数:

*第三个是计算新的数据集的权值(y与Gm的值相同表示分对了,变大),其中Zm为规划因子:

最终得到将所有层分类器的组合:

5.下面是图的目标是对红蓝样本进行分类,可发现伴随着多层分类器的增加,分类效果越来越好。

以上就是Adaboost的思想。

二.介绍GBDT

1.GBDT中的Gradient

Boosting与Adaboosting方法的区别是:每一次计算都是为了减少上一次计算的残差(利用残差学模型),为了消除残差,我们会在残差减少的梯度方向上创建一个新的模型。

2.可以看出GB和Boosting都是不断堆加模型的方式,只不过Boosting是为了减少误分样本的数量,而GB的目的是为了减小残差值。

GBDT的思想主要三部分:

三.GBDT之RT

1.决策树分为两大类:回归树和分类树。回归树用于预测实数值,数值本身有意义,进行运算的结果仍有意义,而分类树用于分类标签值,如阴/晴天这种,所以其加减是不具有意义的。

2.回归树的总体流程跟分类树很相似,不过在每个节点都可以得到一个预测值,以预测年龄为例,结点处代表的预测值并不是一个具体值,而是所有分到这个节点的所有年龄的平均值(就是经过feature阈值分开后的每部分的平均值)。

3.回归树在进行分枝子时,会穷举每个feature的每个阀值找到最佳的分割点,但是衡量最好分割的标准不再是使用最大熵值进行选择(分类树方式),而是计算最小化均方差,即为:

,平均年龄代表结点代表的预测值,当错的越多,均方差就会越大。

4.通过不断令均方差最小来找到最靠谱的分枝依据(按特征分开后每部分损失最小)。

回归树会不断分枝,直到所有叶子节点上人的年龄都唯一,或者达到预定的叶子上限,若最后叶子节点的年龄不唯一,则选取该结点所有的平均年龄作为预测年龄。

四.GBDT之GB

1.GB是一个算法框架,其可以将已有的分类或者回归算法放入其中,得到一个性能很强大的算法。

2.GB算法共需要M次迭代,每次迭代产生一个模型,我们需要让每次迭代产生的模型对训练集的损失函数最小,为了令损失函数最小,我们采用梯度下降的方法,在每次迭代时通过向损失函数的负梯度方向进行移动,

通过这样的方式来使得损失函数越来越小(基于残差进行学习),最后将每阶段模型加权相加得到最后的结果。

3.假设我们的损失函数是均方根误差,那么算法的思想就是使用梯度下降(针对误差的梯度)和基于损失来更新我们的预测,来找到使得MSE最小的值。

4.下面即为具体过程,左边L是对于每个样本点得到的损失函数下的值,通过这个值去求得负梯度方向 gm。 根据负梯度方向去求得α和β参数。

五.GBDT之Shrinkage

1.Shrinkage的思想认为,每次走一小步逐渐逼近结果的效果相比于每次迈一大步逼近的结果能更好的避免过拟合,即它不完全相信每一棵树,认为每一棵树只学到了真理的一部分。

2.在GBDT中,Shrinkage仍以残差为学习的目标,但对于残差学习的结果只累加一小部分,

来逐渐逼近目标,从而有一种渐变的效果,Shrinkage会为每棵树设置一个weight权重(可以再附加学习率来控制渐变情况),通过乘以权重进行渐进。

GBDT的基本思想比较简单:

(1)初始化设置根节点预测值为所有预测目标的平均值。

(2) for  m=1 到M执行下面的过程:

*计算每个样本当前        和yi的残差值:

*基于所有残差训练一个回归树hm(x),  也就是使用上一步得到的残差集(xi,    )训练一棵回归树。

*计算这个回归树所应对应的权重:

*更新整个模型:

(3)输出最终结果。

六.GBDT整体思想及案例

1.现在举个简单版本的例子:

假定训练集中有四个人A、B、C、D,年龄分别是14,16,24,26(目标值),划分特征有购物金额<=1,在网时长,经常到百度知道提问,是否上网大于1.1h,是够全天上网这四个特征,使用这些特征构造GBDT模型,去预测对应的年龄。

假如我们使用一个回归树进行训练可以得到下面的树结构。

2.当我们使用GBDT的方法,由于A,B年龄较为相近,C,D年龄较为相近,他们被分为两拨,每拨用平均年龄作为预测值。此时计算残差(残差的意思就是:

A的预测值 + A的残差 =

A的实际值),所以A的残差就是16-15=1(注意,A的预测值是指前面所有树累加的和,这里前面只有一棵树所以直接是15,如果还有树则需要都累加起来作为A的预测值)。进而得到A,B,C,D的残差分别为-1,1,-1,1,这样第一次得到的回归树如下。

3.然后我们拿残差替代A,B,C,D的原值,到第二棵树去学习,如果我们的预测值和它们的残差相等,则只需把第二棵树的结论累加到第一棵树上就能得到真实年龄了。这里的数据显然是我可以做的,第二棵树只有两个值1和-1,直接分成两个节点。此时所有人的残差都是0,即每个人都得到了真实的预测值,从而可以构造出第二棵回归树。

4.当此时把两颗进行结合(没有计算权重),就能根据特征得到每个人对应的预测年龄。

* 购物较少,经常到百度知道提问;预测年龄A = 15 – 1 = 14

* 购物较少,经常到百度知道回答;预测年龄B = 15 + 1 = 16

* 购物较多,经常到百度知道提问;预测年龄C = 25 – 1 = 24

* 购物较多,经常到百度知道回答;预测年龄D = 25 + 1 = 26

5.可以看出GBDT相对于只使用回归树,少用了一个特征,因为用的特征更少,所以能防止过拟合。

该版本中用残差作为全局最优的绝对方向,并不需要Gradient求解.

(该版本中用残差作为全局最优的绝对方向,并不需要Gradient求解.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python梯度提升回归树_梯度提升回归树(GBDT) 的相关文章

  • 告别3D-DNA试试chromap和yahs做Hi-C辅助组装吧

    之前使用的是3D DNA流程做Hi C的辅助组装 它的最大优势就是输出结果可以对接下游的JBAT juicerbox with Assembly Tools 进行手动矫正 然而它点缺陷也很明显 处理速度不够快 且对植物的优化不行 同时目前许
  • 常微分方程(Ordinary Differential Equation III)

    常微分方程 一阶线性微分方程组 基本概念 解的存在和唯一性定理 齐次线性微分方程组 非齐次线性微分方程组 常系数线性微分方程组 常微分方程 Ordinary Differential Equation I 常微分方程 Ordinary Di
  • C结构体内char[] 数组的初始化

    一种C结构体内char 数组的初始化 include
  • 用户控件自定义 DependencyProperty

    用户控件自定义 DependencyProperty 属性使用教程 DependencyProperty 概念 依赖属性创建 自定义控件的依赖属性 DependencyProperty 概念 依赖属性就是一种可以自己没有值 并能通过使用Bi
  • 断电的方法关闭计算机,win7设置usb关机断电

    win7设置usb关机断电 win7设置usb关机拔出断电的解决方法 小伙伴们可能会经常性的遇到一个问题 就是win7电脑已经关闭了 但是插在计算机usb接口上的硬盘依然会被计算机供电 发出闪亮的光 这就让很多小伙伴们厌烦 为了帮小伙伴们解
  • 第十三篇、基于Arduino uno,获取薄膜压力传感器的值——结果导向

    0 结果 说明 先来看看串口调试助手显示的结果 第一个值是上电后检测到的平均压力值 第二个值是实时的压力值 第三个值是平均压力值和实时压力值的差值 如果是你想要的 可以接着往下看 1 外观 说明 虽然薄膜压力传感器形态各异 但是原理和代码都
  • Spring MVC下篇

    书接上回Spring MVC上篇 前面介绍了Spring MVC的服务器如何获得用户的请求 那么今天就来介绍一下服务器如何将响应返回给客户端 目录 3 服务器将结果返回给用户 前端 3 1 返回一个静态页面 3 2 返回 text html
  • 对wangeditor进行扩展---- 源代码

    看到有人对我做的WangEditor比较感兴趣 问了一些问题 但由于我并不常来 所以就没能及时答复 抱歉了 未避免以后类似问题发生 我将我修改的wangeditor js直接发在这里 有兴趣的可以下载后自己分析 希望能帮到需要的人 扩展后的
  • 【Docker安装部署Kafka+Zookeeper详细教程】

    Docker安装部署Kafka Zookeeper Docker拉取镜像 Docker拉取zookeeper的镜像 docker pull zookeeper Docker拉取kafka的镜像 docker pull wurstmeiste
  • 2022广东省安全员A证第三批(主要负责人)考试试题模拟考试平台操作

    题库来源 安全生产模拟考试一点通公众号小程序 2022广东省安全员A证第三批 主要负责人 培训试题为广东省安全员A证第三批 主要负责人 考试100题全真模拟题 2022广东省安全员A证第三批 主要负责人 考试试题模拟考试平台操作依据广东省安
  • C++ Builder建立COM服务程序的方法

    转 http blog csdn net jaminwm article details 463953 说明 最近学习关于用C Builder建立Activex插件的使用 在网上找到了一些教程 这也是找到这篇文章 但是里边一些细节的东西说明
  • 用rsync同步文件夹

    用rsync命令在不同机器间同步文件夹 及hexo deployer rsync一个BUG的规避方法 命令格式 例如 要把本机public目录与服务器上的 home blog目录同步 用以下命令 rsync delete avz e ssh
  • 对接新浪股票交易接口api需要注意哪些细节 ?

    API接口是一个很抽象的概念 有许多接口 在实际应用中 会产生各种不同的影响 所以 在接入新浪股票交易接口api的过程中 需要注意哪些细节 首先是系统的联结 随着软件的不断发展 很多的软件都被分解成了不同的模块 但在具体的设计中 每个API
  • 无法打开源文件<sys/time.h>,但是用time.h编译就会出错,缺少gettimeofday()

    因为sys time h是uinx系统下的库文件 而现在使用的平台是在windows 由于未指明程序运行的系统 导致找不到对应的头文件 需要重新实现gettimeofday 函数 define WIN32 include
  • Insertion插入排序

    原谅我接着偷懒 是真的没有什么写的内容了啊 好怀疑他们那些大佬是怎么那么多的文章和技术分享的 自闭中ing 最好情况的时间复杂度是 O n 最坏情况的时间复杂度是 O n2 然而时间复杂度这个指标看的是最坏的情况 而不是最好的情况 所以插入
  • 6-4 求自定类型元素的平均 (10分)

    6 4 求自定类型元素的平均 10分 本题要求实现一个函数 求N个集合元素S 的平均值 其中集合元素的类型为自定义的ElementType 函数接口定义 ElementTypeAverage ElementType S intN 其中给定集
  • (一)轻松工作必学:windows bat脚本语法

    记得在初中的时候 电脑刚刚进入了我们的生活 有一天同学发过来一个 xxx bat 的文件 我双击打开之后 电脑就很快就关机了 当时的我还是一头雾水 后来知道这只是一个只需一行代码的批处理文件 批处理文件是一种简化的脚本 可以帮助我们运行一些
  • Node服务器-express框架

    1 Express认识初体验 2 Express中间件使用 3 Express请求和响应 4 Express路由的使用 5 Express的错误处理 6 Express的源码解析 一 手动创建express的过程 1 在项目文件的根目录创建
  • 爬虫从入门到放弃——组件的使用和定制

    以前我们提到了WebMagic的组件 WebMagic的一大特色就是可以灵活的定制组件功能 实现你自己想要的功能 在Spider类里 PageProcessor Downloader Scheduler和Pipeline四个组件都是Spid

随机推荐

  • STM32 HAL——GPIO

    HAL的代码规范建议 以下内容是我自己参照HAL做的总结 如果公司有固定的编码规范 就跟公司保持一致 如果没有 那就推荐和所用库保持一致 注意 因人而异 并不具有普遍适用性 HAL库有如下代码规范 1 目录名除了专有词汇外 统一是单词首字母
  • IDEA去除掉虚线,波浪线,和下划线实线的方法

    推荐一下个人的公众号 终码一生 专注于Java技术学习 开源项目分享和常见问题解决等 喜欢的小伙伴可以关注下 感谢大家的支持 初次安装使用IDEA 总是能看到导入代码后 出现很多的波浪线 下划线和虚线 这是IDEA给我们的一些提示和警告 但
  • 【机器学习】核函数

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 核方法 核技巧 非线性分类问题是指通过利用非线性模型才能很好地进行分类的问题 如图 1 1 1 所示 表示正样本 表示负样本 显然无法用直线 线性模型 将正负样本正确分开 但是可以用
  • android service 返回值,Android平台调用Web Service:线程返回值(示例代码)

    接上文 前文中的遗留问题 对于Java多线程的理解 我曾经只局限于实现Runnable接口或者继承Thread类 然后重写run 方法 最后start 调用就算完事 可是一旦涉及死锁以及对共享资源的訪问和随时监控线程的状态和运行顺序和线程返
  • macOS M2使用conda配置pytorch环境

    一 conda 首先我们需要有conda miniconda的安装配置流程可以看这个http t csdn cn ShcNb 二 进入官网 https pytorch org 选择对应的版本 复制下面的命令 conda install py
  • 2023年1月手机热门品牌型号排行榜(手机行业趋势分析)

    近期苹果降价引起人们的关注 并且优惠较大 iPhone 14 Pro系列在苹果官方授权渠道均降价 线下授权门店普遍降价700元左右 iPhone Pro与Pro Max作为苹果的旗舰产品 通常被认为是更为保值的机型 一般来说 不会在短期内大
  • ueditor编辑器右键粘贴、复制不能用的解决办法

    ueditor编辑器功能非常强大 现在比较多的网站页面或者系统中都集成了百度的ueditor编辑器 使系统编辑文本变得非常容易 但是默认状态下 在使用google内核的浏览器时 会出现右键粘贴复制都不能用的情况 会提示使用ctrl v粘贴
  • WEB交互界面易用性设计和验收的指导性原则

    随着企业intranet和国际internet的迅速发展 越来越多的工作流程 商务交易 教育 培训 会议和讲座 以及个人消费娱乐都被转移到所谓的万维网 World Wide Web 以下简称WEB 上来了 与此相对应的是交互操作的复杂性越来
  • keil device没有芯片

    若试了各种办法没有找到解决方案 可以试试我这个方法 若工程后缀是 uvproj 则可能是keil4的工程 而电脑装的是keil5的版本 改为 uvprojx后即可正常找到芯片了 也可以Project gt Manage gt Migrate
  • Java多线程的一个简单示例

    Java多线程简单示例 代码如下 public class Canteen extends Thread 餐总数 static int rice 20 取餐凭证 static Object key KEY public Canteen St
  • Spring Profiles提供了一种隔离应用程序配置的方式

    24 Profiles Spring Profiles提供了一种隔离应用程序配置的方式 并让这些配置只能在特定的环境下生效 任何 Component或 Configuration都能被 Profile标记 从而限制加载它的时机 Config
  • MySQL 8.0字符集校正

    MySQL升级为8 0版本时 之前版本的字符集往往是不同的 需要校正 执行下面的三个SQL语句的查询结果 可以从库 表 列三个层面对字符集进行校正 库 select concat alter database schema name def
  • pytest的介绍与使用

    pytest介绍 pytest整合了unittest 包含了unittest中的方法 并且比其更轻便快捷 而且结合Allure报告能够清晰的生成测试报告 1 安装 pip install pytest 2 测试文件 test py test
  • C# 选择ListView 报错误:InvalidArgument=“0”的值对于“index”无效。

    加判断 if this ListView SelectedItems Count gt 0 问题解决
  • flutter 安卓打包出现:Transform‘s input file does not exist:

    我的版本 Android studio 4 0 targetSdkVersion 30 出现了这个问题 解决方案 在你的build gradle文件里面添加一句话就可以了 android studio 4 0 以上打包会出现这个问题 lin
  • 工业安全生产信息化平台的基本架构和关键功能分享

    工业安全生产信息化平台是指利用信息技术手段 将工业安全生产管理与数据采集 传输 处理相结合 实现对工业安全生产全过程的数字化 信息化 智能化管理的平台 它通过集成多种信息系统和设备 实现对重大危险源监控预警 安全风险分级管控 安全生产一张图
  • SpringBoot统一异常拦截处理

    前言 大家你好 这是我的第一篇博客 我会把我所学所悟的知识以最简单的语言描述清楚 让大家通俗易懂 正文 下面我要对springboot 1 5 8 RELEASE 中异常拦截处理进行讲解 项目中我们是一定要碰到的情况就是无论在控制层 业务层
  • 安卓平台下ARM Mali OpenCL编程-GPU信息检测

    对于ARM Mali GPU 目前是支持OpenCL1 1 所以我们可以利用OpenCL来加速我们的计算 一直以来 对于Mali GPU的OpenCL编程 一直没有环境来测试 好不容易弄到一个华为Mate7 却因为华为没有提供OpenCL
  • C#__分析使用Winform开发坦克大战

    窗口 using System using System Collections Generic using System ComponentModel using System Data using System Drawing usin
  • python梯度提升回归树_梯度提升回归树(GBDT)

    梯度提升回归树 GBDT 发布时间 2018 08 30 13 22 浏览次数 1024 标签 GBDT 一 从Boosting思想开始 1 梯度提升回归树是一种从它的错误中进行学习的技术 它本质上就是集思广益 集成一堆较差的学习算法进行学