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

news/2025/1/16 14:02:03/

一、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.ppmy.cn/news/96966.html

相关文章

Java性能调优及排查

Java性能调优及排查 一、 简介二、Java性能瓶颈分析与排查1. 硬件原因引起的性能问题2. JVM原因引起的性能问题3. 应用程序级别引起的性能问题 三、Java性能调优方案制定1. 性能测试方案a. 压力测试b. 监控测试c. 诊断测试 2. 性能调优方案制定a. JVM参数调整b. 代码优化c. 服务…

团队人才流失怎么办

团队人才流失怎么办 1. 人才流失的场景分析1.1 岗位认同1.2 个人发展诉求1.3 业务安排不合理1.4 技术氛围1.5 孤军奋战1.6 绩效原因1.7 家庭原因1.8 个人原因 2. 人才保留的一些概念2.1 what?2.2 why?2.3 who?2.4 when or where?2.5 how? 3. 如何做好人岗匹配4.…

如何在华为OD机试中获得满分?Java实现【微服务的集成测试】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…

5 种JavaScript 中的高级异常处理方法

目录 1.自定义异常 2.try-catch-finally 3.Promises 4.Async/await 5.window.onerror 结论 异常处理是任何编程语言的重要组成部分,JavaScript 也不例外。在本文中,我们将讨论在 JavaScript 中处理异常的5种高级技术。 1.自定义异常 JavaScrip…

每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?

String str"i"与 String strnew String(“i”)一样吗? 要想知道二者是否一样,我们只需要通过进行比较,为什么不用equals的原因,大家可以认真阅读这篇文章 测试代码如下: public class Test1 {public stati…

AI一键抠图

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

什么是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字…

MATLAB连续LTI系统的时域分析(十)

目录 1、实验目的: 2、实验内容: 1、实验目的: 1)掌握利用MATLAB对系统进行时域分析的方法; 2)掌握连续时间系统零输入响应的求解方法; 3)掌握连续时间系统零状态响应、冲激响应和…