Boosting以及代表算法(Adaboost、GBDT)介绍

news2024/11/26 22:39:59

一、Boosting介绍

1.什么是Boosting

Boosting(提升)是一种集成学习方法,通过组合多个弱学习器来构建一个强学习器。与Bagging不同,Boosting采用了序列化的方式构建模型,每个弱学习器都是在前一个弱学习器的基础上进行训练,通过逐步调整样本的权重或难易程度来提高模型的预测性能。

简而言之:没新加入一个弱学习器,整体能力就会得到提升

代表算法有:Adaboost,GBDT,XGBoost,LightGBM

2.Boosting的实现过程
  1. 训练第一个学习器

    在这里插入图片描述

  2. 调整数据分布

    在这里插入图片描述

  3. 训练第二个学习器

    在这里插入图片描述

  4. 再次调整数据分布

    在这里插入图片描述

  5. 依次训练学习器,调整数据分布

    在这里插入图片描述

  6. 整体过程实现

    在这里插入图片描述

3.Boosting集成与Bagging集成的区别

Boosting集成和Bagging集成是两种常见的集成学习方法,它们在构建强学习器的方式上有一些区别。

  1. 样本选择方式:
    • Bagging集成:采用自助采样(有放回地从原始训练集中进行采样)的方式构建每个弱学习器的训练集。每个样本在训练集中出现的概率大约为63.2%。
    • Boosting集成:根据前一个弱学习器的性能调整样本权重,使得后续的弱学习器更关注于难以分类的样本。
  2. 学习过程:
    • Bagging集成:各个弱学习器之间是相互独立并行构建的,可以并行训练多个弱学习器。
    • Boosting集成:各个弱学习器是按顺序串行构建的,每个弱学习器都是在前一个学习器的基础上进行训练。
  3. 弱学习器权重:
    • Bagging集成:弱学习器的权重是相等的,每个弱学习器对最终预测结果的贡献是相同的。
    • Boosting集成:弱学习器的权重是根据其性能来调整的,错误分类的样本权重会被增加,正确分类的样本权重会被减少,以使得后续的弱学习器更关注于难以分类的样本。
  4. 预测结果的组合:
    • Bagging集成:通过简单投票或平均等方式对所有弱学习器的预测结果进行组合。
    • Boosting集成:通过加权投票或加权平均等方式对所有弱学习器的预测结果进行组合,权重通常与弱学习器的性能有关。
  5. 主要作用:
    • Bagging集成:主要用于提高泛化性能(解决过拟合,也可以说降低方差)
    • Boosting集成:主要用于提高训练精度(解决欠拟合,也可以说降低偏差)

总体而言,Bagging集成更注重通过样本的随机采样来增加模型的多样性,减小模型的方差;而Boosting集成更注重通过逐步调整样本权重和组合弱学习器的方式,提高模型的预测能力,减小模型的偏差

二、Adaboost的介绍

1.Adaboost的构造过程
  1. 初始化样本权重:

    对于包含N个样本的训练集,初始时将每个样本的权重设置为1/N。

  2. 弱学习器训练:

    构建第一个弱学习器(通常是一个简单的分类器)并使用训练集进行训练。在训练过程中,每个样本的权重会影响其在弱学习器训练中的重要性。

  3. 弱学习器权重计算:

    计算第一个弱学习器的权重(也称为该弱学习器的预测能力)。这个权重表示了该弱学习器在最终的集成模型中的贡献程度。

  4. 样本权重调整:

    根据第一个弱学习器的训练结果,调整每个样本的权重。被错误分类的样本的权重会增加,而被正确分类的样本的权重会减少。

  5. 更新样本权重归一化因子:

    为了保持样本权重的总和为1,需要对样本权重进行归一化。

  6. 迭代过程:

    重复步骤2-5,构建更多的弱学习器,并更新每个弱学习器的权重和样本权重,直到达到预设的迭代次数或满足终止条件。

  7. 弱学习器权重组合:

    根据每个弱学习器的权重,将它们进行加权组合,得到最终的强学习器。

  8. 预测结果:

    使用集成的强学习器对新样本进行预测,根据弱学习器的权重和预测结果进行加权投票或加权平均。

AdaBoost通过迭代的方式,逐步调整每个样本的权重和每个弱学习器的权重,使得难以分类的样本和错分的样本在后续的学习过程中获得更高的关注度。这样,AdaBoost能够将多个弱学习器结合起来构建一个强大的分类器,提高模型的性能和泛化能力。

2.Adaboost的API
  • from sklearn.ensamble import AdaBoostClassifier

三、GBDT的介绍

GBDT的全称是Gradient Boosting Decision Tree,梯度提升树,在传统机器学习算法中,GBDT算得上TOP3的算法。想要理解GBDT的真正意义,那就得理解GBDT中的Gradient BoostingDecision Tree分别是什么。

1.Decision Tree:CART回归树

GBDT使用的决策树是CART回归树,无论是处理回归问题还是二分类以及多分类问题,GBDT使用的决策树都是CART回归树。

  • 为什么不用CART分类树呢?
    • 因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。
2.Gradient Boosting:梯度提升树

Gradient Boosting是一种集成学习方法,通过组合多个弱学习器来构建一个强学习器。它采用了序列化的方式构建模型,每个弱学习器都是在前一个弱学习器的基础上进行训练,并通过梯度下降的方式不断调整模型的预测结果。Gradient Boosting通过最小化损失函数的负梯度来更新模型的参数,以逐步提高模型的预测能力。

综上所述,Gradient Boosting是一种集成学习方法,用于指导GBDT模型的构建和更新过程,而Decision Tree是GBDT中使用的基本学习算法,用于构建每个弱学习器(决策树)。

3.GBDT算法的原理
  1. 初始化模型:

    初始时,将集成模型的预测值设置为一个常数(例如,训练集中目标变量的均值),作为初始的预测结果。

  2. 迭代训练弱学习器:

    通过迭代的方式,训练一系列的弱学习器,每个弱学习器都在之前模型的基础上进行训练。迭代的次数可以事先指定,也可以通过验证集的效果来确定。

  3. 计算残差:

    对于每个训练样本,计算实际值与当前模型预测值之间的残差(实际值减去当前模型的预测值)。残差表示当前模型无法准确预测的部分。

  4. 拟合弱学习器:

    使用当前残差作为目标变量,训练一个新的弱学习器。这个弱学习器将尝试捕捉之前模型无法解释的部分。

  5. 更新模型预测值:

    将新训练的弱学习器添加到集成模型中,并更新模型的预测值。通过给新的弱学习器分配一个权重,可以控制其对最终预测结果的影响程度。

  6. 迭代更新:

    重复步骤3-5,每次迭代都根据之前模型的残差训练一个新的弱学习器,并更新模型预测值。每次迭代都尝试进一步减少模型的残差。

  7. 组合弱学习器:

    最终,将所有弱学习器的预测结果按照一定的权重进行组合,得到集成模型的最终预测结果。

通过不断迭代训练弱学习器,并将它们组合在一起,GBDT能够逐步提升模型的预测能力。每个弱学习器都专注于解决前一个模型无法准确预测的部分,从而逐渐改进整体模型的性能。由于GBDT采用了梯度下降的思想,它能够有效地处理回归和分类问题,并在许多实际应用中取得良好的性能。

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

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

相关文章

Linux-0.11 文件系统exec.c详解

Linux-0.11 文件系统exec.c详解 模块简介 该模块实现了二进制可执行文件和shell脚本文件的加载和执行。 函数详解 create_tables static unsigned long * create_tables(char * p,int argc,int envc)该函数的作用是建立参数和环境变量指针表。 create_table的作用就是建立…

玄子Share - IDEA 2023.1 自定义 代码模板(Servlet)

玄子Share - IDEA 2023.1 自定义 代码模板(Servlet) 23版 IDEA 内取消了自动生成 Servlet 模板类,不过我们可以自己定义一个 Servlet 模板 步骤 第一步打开 IDEA 设置界面,编辑器 -> 文件和代码模板 -> 点击加号新建模板…

chatgpt赋能python:Python补齐0,让你在编程中更得心应手

Python 补齐0,让你在编程中更得心应手 在Python编程中,我们经常会遇到数字需要补齐0的情况。比如说我们要制作一个日期格式的字符串,例如“2022-02-22”,但是当天数只有一位数时,需要在前面补0,即“2022-0…

chatgpt赋能python:Python转换器——将数据转换为所需格式的工具

Python 转换器——将数据转换为所需格式的工具 Python 是一种功能强大的编程语言,因为它具有处理和分析数据的能力,因此被广泛使用。然而,在现代互联网时代,数据的格式和大小通常不相同,因此经常需要将数据从一种格式…

chatgpt赋能python:Python词形还原:一种优化搜索引擎排名的方法

Python词形还原:一种优化搜索引擎排名的方法 什么是词形还原? 词形还原是自然语言处理(NLP)中的一种重要技术。它是将单词转化为其最基本的形式的过程,例如动词的原形或名词的单数形式。这个过程旨在帮助计算机更好地…

openGauss 3.1企业版升级至5.0

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

什么是SOME/IP?

本文是SOME/IP 官方文档的翻译。原文地址:https://www.autosar.org/fileadmin/standards/R22-11/FO/AUTOSAR_RS_SOMEIPProtocol.pdf 1.引言和概览 2. 协议要求 3. 缩略语和术语 术语/缩略语描述Byte Order Mark字节顺序标记(byte order mark, BOM)是一个Unicode字…

Spring学习记录

目录 工厂模式的三种形态 简单工厂模式 代码: 运行结果: 总结: 工厂模式 代码: 运行结果: 总结: 抽象工厂模式 代码: 运行结果: 总结: bean的单例与多例 设置 …

chatgpt赋能python:Python父类调用子类:多态性的核心思想

Python父类调用子类:多态性的核心思想 多态性是面向对象编程(OOP)的核心思想之一,它允许不同的对象在调用同一个方法时产生不同的行为。Python是一门支持多态性的编程语言。在Python中,使用父类调用子类的方法是实现多态性的关键之一。 什么…

考研C语言第五章

5.2 数组基础知识 注意要点: 1.下标0开始 2.没有定义的地方是0 5.3 数组访问越界与数组传递 访问越界,定义超过前面定义的数组长度,占据了后面定义数据的地方 非常危险! 在循环里面往往容易造成越界 数组传递 1.函数引用时…

AI一键抠图

前言 由于需要批量抠图,原本是想用MODNet的,可惜最新的模型官方不开源,旧模型扣的人物边缘有白边。最后发现了PP飞桨。 飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训…

【JDK】一、jdk17的下载与安装配置(图文说明超详细)

JDK17的下载与安装 前言一、JDK17下载1、官方下载地址 ( Oracle中国的官方网站) 二、JDK17安装1、先看一下我现在的java版本和环境变量2、开始新的安装第一步:双击下载的jdk-17.0.7_windows-x64_bin.exe 进入到安装页面第二步:jdk…

内存管理之内存寻址(笔记)

计算机体系结构中的核心问题之一就是如何有效的进行内存寻址。因为所有运算的前提都是要先从内存中取地数据。所以内存寻址技术在一定程度上代表了计算机技术。 1. 图灵机和冯诺依曼体系 图灵机:图灵机是一种通用自动的机器模型,通过二段无线延申的纸带…

C++Primer——第一讲

重制CPrimer 目录 一、第一个程序 二、代码 二、题目 前言 我们会从一个C程序开始&#xff0c;这里默认您已经安装了Dev-C或其他的IDE软件。 一、第一个程序 下面这串代码是可以输出“Hello world”的代码。 #include<bits/stdc.h> using namespace std; int main(){…

Arduino+ESP8266 MCU开发板 ----带你开发DHT11温湿度开发项目

目录 PC调试过程如图 手机APP可在各大商场APP中下载 手机APP调试结果/效果如图 ESP8266 MUC介绍 ESP8266 MUC主要特点&#xff1a; 步1&#xff1a;下载Arduino&#xff0c;本次不多做说明&#xff0c;本次使用的arduino软件为老版本的&#xff0c;新版本有关的问题本人…

统计学的假设检验

假设检验的核心其实就是反证法。反证法是数学中的一个概念&#xff0c;就是你要证明一个结论是正确的&#xff0c;那么先假设这个结论是错误的&#xff0c;然后以这个结论是错误的为前提条件进行推理&#xff0c;推理出来的结果与假设条件矛盾&#xff0c;这个时候就说明这个假…

总结881

学习目标&#xff1a; 月目标&#xff1a;5月&#xff08;1800基础部分&#xff0c;背诵15篇短文&#xff09; 周目标&#xff1a;1800高等数学部分并完成错题记录&#xff0c;英语背3篇文章并回诵 每日必复习&#xff08;5分钟&#xff09; 前天错题纠错&#xff0c;线代部…

Solidity拓展:数据类型的转换

1.数据类型隐式转换 (自动) 同一类型之间的转换:由低长度转换为高长度int8-int16-int32int256,但int不能自动转换成uint&#xff0c;因为放不下负数所以直接不让转换,且 int8 不能转换成 uint256 &#xff08;因为 uint256 不能涵盖某些值&#xff0c;例如&#xff0c; -1&…

Android解决xutils数据库kotlin添加List数组问题

Android解决xutils数据库kotlin添加List数组问题 前言&#xff1a; 上一篇我们讲解了xutils中数据库版本升级的使用和问题&#xff0c;这篇博客讲解xutils中数据库添加list数据的问题&#xff0c;这个库真的是很强大&#xff0c;但是数据库的使用真不友好&#xff0c;添加一个…

从零开始手搓一个STM32与机智云的小项目——硬件介绍

文章目录 前言硬件简介选型1.主控2.电源3.电机驱动4.舵机驱动5.USB转TTL6.其他模块 原理图绘制1.STM32最小系统1.电源输入2.晶振选择3.复位电路4.BOOT选择电路5.下载电路 2.电源部分及与PC通信部分3.功能模块的实现1.串口2.定时器输入捕获与输出比较3.硬件SPI4.ADC5.温湿度传感…