Scikit-Learn梯度提升决策树(GBDT)

Scikit-Learn梯度提升决策树

    • 1、梯度提升决策树(GBDT)
      • 1.1、Boosting方法
      • 1.2、GBDT的原理
      • 1.3、GBDT回归的损失函数
      • 1.4、梯度下降与梯度提升
      • 1.5、随机森林与GBDT
      • 1.6、GBDT的优缺点
    • 2、Scikit-Learn梯度提升决策树(GBDT)
      • 2.1、Scikit-Learn GBDT回归
        • 2.1.1、Scikit-Learn GBDT回归API
        • 2.1.2、GBDT回归实践(加州房价预测)
      • 2.2、Scikit-Learn GBDT分类
        • 2.2.1、Scikit-Learn GBDT分类API
        • 2.2.2、GBDT分类实践(鸢尾花分类)
      • 2.3、GBDT参数调优与选择



1、梯度提升决策树(GBDT)


梯度提升决策树(GBDT)是集成学习Boosting提升中的一种重要算法。GBDT在机器学习知识结构中的位置如下:

在这里插入图片描述
梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是一种迭代的决策树算法,它通过构造一组弱学习器(决策树),并把多颗决策树的结果累加起来作为最终的预测输出。该算法将决策树与集成思想进行了有效的结合

1.1、Boosting方法


我们已经知道,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练

与Bagging方法不同,Boosting方法在训练基分类器时采用串行的方式,各个基分类器之间有依赖

Boosting的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。预测时,根据各层分类器的结果的加权得到最终结果

在这里插入图片描述

  • Boosting:串行,将基分类器层层叠加
  • Bagging:并行,各基分类器之间无强依赖

1.2、GBDT的原理


梯度提升决策树算法的流程如下:

  • 初始化:设定一个初始预测值,通常为所有样本目标变量的均值,这个初始预测值代表了我们对目标变量的初始猜测

  • 迭代训练:GBDT是一个迭代算法,通过多轮迭代来逐步改进模型。在每一轮迭代中,GBDT都会训练一棵新的决策树,目标是减少上一轮模型的残差。残差是预测值与真实值之间的误差,新的树将学习如何纠正这些残差

    • 计算残差:在每轮迭代开始时,计算当前模型对训练数据的预测值与实际观测值之间的残差。这个残差代表了前一轮模型未能正确预测的部分

    • 拟合残差:以当前残差为新的学习目标变量,训练一棵新的决策树。这棵树将尝试纠正上一轮模型的错误,以减少残差

    • 更新模型:将新训练的决策树与之前的模型进行组合,更新预测值。具体地,将新树的预测结果与之前模型的预测结果累加,得到更新后的模型

  • 终止/集成:当达到预定的迭代次数或残差变化小于阈值时停止迭代。将所有决策树的预测结果相加,得到最终的集成预测结果。这个过程使得模型能够捕捉数据中的复杂关系,从而提高预测精度

GBDT的核心点在于不断迭代,每一轮迭代都尝试修正上一轮模型的错误,逐渐提高模型的预测性能

GBDT算法流程的数学描述参考文章:https://blog.csdn.net/u010366748/article/details/111060108

例如,使用GBDT预测年龄:

在这里插入图片描述

  • 第一个弱分类器(第一棵树)预测一个年龄(如20岁),计算发现误差有10岁

  • 第二个弱分类器(第二棵树)拟合残差10,预测值6,计算发现差距还有4岁

  • 第三个弱分类器(第三棵树)继续拟合残差4,预测值3,发现误差只有1岁了

  • 第四个弱分类器(第四课树)用1岁拟合剩下的残差,完成

最终,四个弱分类器(四棵树)的结论累加起来,得到30岁这个标准答案。实际在工程应用中,GBDT计算负梯度,使用负梯度近似残差

1.3、GBDT回归的损失函数


回归任务下,GBDT在每一轮迭代时对每个样本都会有一个预测值,此时的损失函数为均方差损失函数:

在这里插入图片描述
损失函数的负梯度计算如下:

在这里插入图片描述
可以看到,当损失函数选用均方误差损失时,每次拟合的值就是真实值减预测值,即残差

1.4、梯度下降与梯度提升


负梯度方向是梯度下降最快的方向。梯度下降与梯度提升两种迭代优化算法都是在每一轮迭代中,利用损失函数负梯度方向的信息,更新当前模型。但两者是完全不同的概念

梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新

在这里插入图片描述

梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类

在这里插入图片描述
梯度提升与梯度下降的主要区别如下:

比较项梯度下降梯度提升
模型定义空间参数空间函数空间
优化规则 θ t \theta_t θt= θ t − 1 \theta_{t-1} θt1+ Δ θ t \Delta\theta_t Δθt f t ( x ) f_t(x) ft(x)= f t − 1 ( x ) f_{t-1}(x) f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【车载开发系列】CAN通信总线再理解(中篇)

【车载开发系列】CAN通信总线再理解(中篇) 九. CAN总线标准十. CAN物理层十一. CAN数据链路层1)CAN的通信帧类型2)CAN的标准帧格式1. CAN ID2. 数据场 3)CAN总线仲裁 十二. CAN应用层1)CANopen2&#xff09…

《车载以太网通信测试》课程来袭!!!

本课程包含教程和脚本两部分内容。 教程 详细介绍以太网,如何理解TCP/IP协议,CAPL中涉及以太网的代码,以太网测试环境如何搭建,从物理层、链路层、网络层、传输层到应用层多种协议测试点的测试原理和测试方法介绍,中…

西门子学习笔记12 - BYTE-REAL互相转化

这是针对于前面MQTT协议的接收和发送数组只能是BYTE数组做出的对应的功能块封装。 1、BYTE-REAL转化 1、把byte数组转成字符串形式 2、把字符串转成浮点数 2、REAL-BYTE转化 1、把浮点数转成字符串 2、把字符串转成Byte数组

【转载】TIOBE 编程指数 6 月排行榜公布,vb.net排第九

原文地址:https://baijiahao.baidu.com/s?id1801368030428902126&wfrspider&forpc IT之家 6 月 9 日消息,TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标,评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎&#…

乐鑫esp32系列睡眠模式下蓝牙连接功耗测试,新支持ESP-C6,启明云端乐鑫代理商

本教程适用于ESP32-S3、ESP32-C3、ESP32-C6; 睡眠模式介绍 ESP32系列常见的休眠方式有三种,分别为Modem-sleep、Light-sleep 和 Deep-sleep。 Modem-sleep模式:CPU 正常工作,可以对时钟进行配置。 进入 Modem-sleep 模式后&…

大模型与知识图谱:联合打造智能未来,案例解析让你大开眼界!

在数字化浪潮中,大模型和知识图谱作为人工智能领域的两大核心技术,正逐渐改变着我们的生活。大模型,是一种通过大规模数据训练得到的深度学习模型,具备强大的语义理解和推理能力;而知识图谱,则是以图状结构…

光伏设计需要设计哪些方面?

光伏设计是一项复杂而关键的工作,它涉及到多个方面的综合考虑,以确保光伏系统的效率、安全性和可持续性。下面将详细探讨光伏设计需要设计的几个方面。 一、系统规模与布局 光伏设计的首要任务是确定系统的规模和布局。这包括评估安装地点的光照资源、可…

【nginx】 nginx核心功能

【nginx】 nginx核心功能 1.nginx核心功能 1. 反向代理 2. 负载均衡 3. 动静分离 4. nginx的高可用2. 反向代理 正向代理: 该服务器代理的是客户端,对于服务器来说,不知道真实客户端的ip。比如: 翻墙软件。 访问国外的服务器---使用了翻墙软件----对…

Vue 使用setInterval定时器导致前端页面卡死(解决方法)

Vue 使用setInterval定时器导致前端页面卡死 原因 setinterval不会清除定时器队列,每重复执行1次都会导致定时器叠加,最终卡死你的网页。 其原因与JS引擎线程有关(需深入研究JS引擎线程) ,但是setTimeout是自带清除定…

同城跑腿多合一系统源码小程序支持安卓+IOS+公众号+H5

🚀 同城跑腿多合一小程序:便捷生活新选择 💨 一、引言:走进便捷新纪元 在这个快节奏的现代生活中,时间成了最宝贵的财富。而“同城跑腿多合一小程序”正是为了满足大家对于便捷、高效生活的追求而诞生的。它不仅是一款…

RapidLayout:中英文版面分析推理库

引言 继上一篇文章之后,我这里想着将360发布的版面分析模型整合到现有的rapid_layout仓库中,便于大家快速使用。 不曾想到,我这整理工作越做越多了,好在整体都是往更好方向走。 起初,rapid_layout项目是在RapidStru…

vue3页面传参

一&#xff0c;用query传参 方法&#xff1a; router.push({path: ‘路由地址’, query: ‘参数’}) 例子&#xff1a;a页面携带参数跳转到b页面并且b页面拿到a页面传递过来的参数 在路由router.ts配置 a页面&#xff1a; <template><div >a页面</div>…

【可控图像生成系列论文(二)】MimicBrush 港大、阿里、蚂蚁集团合作论文解读2

【可控图像生成系列论文&#xff08;一&#xff09;】简要介绍了论文的整体流程和方法&#xff0c;本文则将就整体方法、模型结构、训练数据和纹理迁移进行详细介绍。 1.整体方法 MimicBrush 的整体框架如下图所示。为了实现模仿编辑&#xff0c;作者设计了一种具有双扩散模型…

SpingBoot快速入门下

响应HttpServietResponse 介绍 将ResponseBody 加到Controller方法/类上 作用&#xff1a;将方法返回值直接响应&#xff0c;如果返回值是 实体对象/集合&#xff0c;将会自动转JSON格式响应 RestController Controller ResponseBody; 一般响应 统一响应 在实际开发中一般…

DS1339C串行实时时钟-国产兼容RS4C1339

RS4C1339串行实时时钟是一种低功耗的时钟/日期设备&#xff0c;具有两个可编程的一天时间报警器和一个可编程方波输出。地址和数据通过2线双向总线串行传输。时钟/日期提供秒、分钟、小时、天、日期、月份和年份信息。对于少于31天的月份&#xff0c;月末的日期会自动调整&…

PDO预编译与sql注入

刚学web安全的时候学到sql注入防御&#xff0c;那些文章基本上都会说利用pdo预编译就可以近乎完美防御sql注入&#xff0c;或者看到一些渗透经验贴&#xff0c;遇到sql经过预编译的网站师傅们总是会建议赶紧换个站&#xff0c;那么预编译究竟能不能完美防御sql注入&#xff0c;…

VBA基础知识点总结

VBA教程 VBScript教程 数据类型 数字数据类型 非数字数据类型 变量&常量 可以通过Dim、Public或Private语句声明变量。 变量语法&#xff1a;Dim <<variable_name>> As <<variable_type>>&#xff08;需要在使用它们之前声明&#xff09; 常量语…

LVS+Keepalived高可用集群部署

一、高可用群集(HA)的作用 企业应用中&#xff0c;单台服务器承担应用存在单点故障的危险&#xff0c;单点故障一旦发生&#xff0c;企业服务将发生中断&#xff0c;造成极大的危害。 高可用集群是由一台主调度器和一台或多台备用调度器。在主调度器能够正常运转时&#xff0c;…

优选算法刷题笔记 2024.6.10-24.6.20

一、双指针算法(快慢指针,对撞指针) 艹&#xff0c;CSDN吞了我是十三题笔记&#xff01;&#xff01;&#xff01; 二、滑动窗口(滑动窗口) 1、找到字符串中所有字母异位词 class Solution {public List<Integer> findAnagrams(String s, String p) {int[] hash1 new in…

【Python】一文向您详细解析内置装饰器 @lru_cache

【Python】一文向您详细解析内置装饰器 lru_cache 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&a…