什么是 Boosting

news2025/5/19 13:00:49

什么是 Boosting

Boosting 通过按顺序纠正错误并将弱学习器组合成强预测器来提高机器学习性能。机器学习的最新进展引入了解决复杂问题的新方法。Boosting 是一种不断显示出希望的技术。它通过使用多种算法来提高性能,从而改变了我们进行数据建模的方式。随着 Boost 概念的不断发展,Gradient Boosting 和 XGBoost 等更新的变体已经出现,突破了速度和准确性的界限。

机器学习中的提升

Boosting 是机器学习中一种强大的集成学习方法,专门设计用于通过将多个弱学习器(性能仅比随机猜测稍好一点的模型)组合到一个强学习器中来提高预测模型的准确性。

提升的本质在于迭代过程,其中每个弱学习器都经过训练以纠正其前身的错误,从而逐渐增强整体模型的性能。通过关注早期模型所犯的错误,Boosting 将一组较弱的学习器转换为更准确的模型。

提升的工作原理

Boosting 通过一个系统的过程将弱学习者转变为一个统一的强学习者,该过程专注于减少顺序模型训练中的错误。涉及的步骤包括:

  1. 选择初始权重:为所有数据点分配初始权重,以表明它们在学习过程中的重要性。
  2. **按顺序训练:**根据数据训练第一个弱学习器。评估其性能后,增加错误分类实例的权重。这使得下一个较弱的学习器更专注于更难的情况。
  3. 迭代过程:重复调整权重和培训后续学习者的过程。到目前为止,每个新模型都侧重于集成 (ensemble) 的弱点。
  4. 合并结果:聚合所有弱学习器的预测以形成最终输出。聚合通常是加权的,其中更准确的学习者具有更大的影响力。

这种方法通过更集中地关注训练数据中的困难情况,有效地最大限度地减少了错误,从而产生了强大的预测性能。

提升算法的类型

让我们来看看一些最著名的提升算法。

AdaBoost(自适应提升)

AdaBoost 是最早的提升算法之一。它侧重于在每次添加学习者时重新加权训练示例,更加强调分类不正确的实例。AdaBoost 对于二进制分类问题特别有效。

梯度提升

梯度提升按顺序构建模型并在此过程中纠正错误。它使用梯度下降算法来最大限度地减少添加新模型时的损失。此方法非常灵活,可用于回归和分类问题。

XGBoost(极端梯度提升)

XGBoost 是一个优化的分布式梯度提升库,也是 Kaggle 上许多比赛获胜者的首选方法。它旨在实现高效、灵活和便携。它在 Gradient Boosting 框架下实施机器学习算法,为许多实际数据问题提供可扩展且准确的解决方案。

集成方法

Boosting 属于较大的集成方法组。集成方法是一种机器学习方法,它结合了多个模型来产生比任何单个模型通常无法单独实现的更准确的预测。这些技术的工作原理是利用不同模型的多样性,每个模型都有自己的优点和局限性,以创建一个集体决策过程。

不同类型的集成方法

Boosting 是一种突出的集成学习技术,但它只是增强模型预测强度的几种技术之一。让我们来看看其他几个。

  • **Bagging (Bootstrap Aggregating):**一种在训练数据的随机子集上训练多个模型并聚合其预测的方法。它减少了方差并有助于避免过度拟合。
  • **Stacking (Stacked Generalization):**一种通过训练元模型来组合多个模型以了解如何最好地组合基础模型的预测的技术。它可以捕获单个模型可能会遗漏的复杂模式。
  • **Blending:**类似于 stacking,但使用保留的验证集来训练元模型,而不是交叉验证。它比堆叠更简单、更快捷,但可能不那么可靠。
  • **投票:**通过多数投票(硬投票)或预测概率的加权平均值(软投票)组合来自多个模型的预测。它易于实现,并且对各种基本模型非常有效。

代练 vs. 装袋

Boosting 通常被比作 bagging。尽管它们在某些方面相似,但肯定存在很大差异。下表比较了代练和装袋:

特征提高装袋
概念重点通过关注以前错误分类的示例,按顺序提高准确性。在随机子集上训练多个模型,对其预测进行平均。
模型训练顺序训练允许每个模型从前一个模型的错误中学习。在不同数据样本上对模型进行并行训练增加了多样性。
减少错误主要减少偏差,并在较小程度上减少方差。减少方差,尤其是在容易过度拟合的复杂模型中。
对异常值的敏感度由于更加关注错误分类的数据,因此更加敏感。由于随机抽样会稀释异常值的影响,因此灵敏度较低。
例子AdaBoost、梯度提升、XGBoost。随机森林,Bootstrap 聚合。

Python 中的 Boosting 实现

了解提升的最佳方法之一是尝试在实践中展示它。为此,我们将使用这个 Almond Types Classification Kaggle 数据集,该数据集具有三种类型的杏仁:、 和 ,以及它们独特的物理属性,例如面积、周长和圆度。MAMRASANORAREGULAR

每个杏仁样品的特征都是通过复杂的图像处理技术提取的。数据集中的 Null 值表示杏仁的方向(无论是直立、侧放还是仰卧)影响特征提取过程准确性的实例。

现在,我们使用此数据集来尝试分类任务。我们将使用 AdaBoost 算法,正如我们所说,该算法通过将弱学习器组合成一个强学习器来提高模型性能。

导入库

我们首先导入必要的库并加载 almond 数据集。然后,我们拆分特征和目标变量。

import pandas as pd
almonds = pd.read_csv('Almond.csv', index_col=0)
X = almonds.drop('Type', axis=1)  
y = almonds['Type']
处理缺失数据

接下来,我们通过使用 KNN 插补器填充缺失值来清理数据集。这确保了我们的模型有一个完整的数据集。

from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
X_imputed = imputer.fit_transform(X)
拆分数据以进行训练和测试
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_imputed, y, test_size=0.2, random_state=42)
训练决策树分类器

我们在这里训练一个简单的决策树模型,它为我们提供了基线准确性,然后再继续提高其性能

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
tree = DecisionTreeClassifier(max_depth=1, random_state=42)
tree.fit(X_train, y_train)
tree_accuracy = accuracy_score(y_test, tree.predict(X_test))
使用 AdaBoost 提高性能

然后,我们使用 AdaBoost 通过关注其错误和提高准确性来提高决策树的性能。

from sklearn.ensemble import AdaBoostClassifier
ada = AdaBoostClassifier(base_estimator=tree, n_estimators=100, learning_rate=1.0, random_state=42)
ada.fit(X_train, y_train)
ada_accuracy = accuracy_score(y_test, ada.predict(X_test))

# Print the accuracies
print(f'Accuracy of the weak learner (Decision Tree): {tree_accuracy * 100:.2f}%')
print(f'Accuracy of AdaBoost model: {ada_accuracy * 100:.2f}%')
最终输出

最后,我们比较结果,了解 AdaBoost 如何显著提高准确性。

Accuracy of the weak learner (Decision Tree): 43.14%
Accuracy of AdaBoost model: 61.50%

那么,收获是什么?结果说明了通过 AdaBoost 进行集成学习的力量。在这里,弱学习器是一个最大深度仅为 1 的决策树,其准确率约为 43%。鉴于只有三种杏仁,43% 的准确率并不比猜测的平均值高多少。但是,当这个弱学习器在具有 100 次迭代的 AdaBoost 模型中用作基本估计器时,准确率提高到 62%。

退后一步,需要注意的是,虽然 AdaBoost 在我们的 Almonds 数据集上报告了更高的准确性,但它可能并不总是最适合每种情况。存在过度拟合的风险,尤其是对于像这样的较小数据集,模型可能会变得过于复杂。实际上,更简单的分类技术对于某些任务的性能可能同样好,甚至更好。因此,虽然我们在这里使用 AdaBoost 来说明这个概念,但重要的是要退后一步,考虑一下我们是否真的想要高级别的复杂性。

结论

Boosting 代表了机器学习领域的重大进步,展示了集成方法在提高预测准确性方面的力量。正如我们所探索的,AdaBoost、Gradient Boosting 和 XGBoost 等提升算法基于一个基本原理运行:组合多个弱模型以创建单个更有效的预测器。

但是,重要的是要记住,提升只是机器学习工具包中的一种工具。它的有效性可能因具体问题而异。与任何机器学习技术一样,了解何时以及如何应用提升是其充分发挥潜力的关键。

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

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

相关文章

Redis 数据类型与操作完全指南

Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。与传统的关系型数据库不同,Redis 提供了丰富的数据类型和灵活的操作方式,这使得它能够高效地解决各种不同场景下的数据存储和处理问题。本文将全面介绍 R…

Digi XBee XR 系列介绍

Digi 延续了 20 多年来亚 GHz 射频模块的传统,推出了 Digi XBee XR 系列远距离模块,包括 Digi XBee XR 900 - 已通过多个地区的预先认证 - 以及 Digi XBee XR 868 - 已通过欧洲地区应用的预先认证。 这些先进的射频模块专为远距离抗干扰无线通信而设计。…

【方法论】金字塔原理概述:写作逻辑的底层架构与实践法则

文章目录 一、为何采用金字塔结构:对抗认知局限的思维框架1、 梳理逻辑,抽象归纳2、自上而下,结论居首3、 结论先行之必要 三、金字塔结构1、纵向逻辑:上层思想必须是下层思想的概括提炼2、横向逻辑:每组思想需属于同一…

BERT 核心技术全解析:Transformer 双向编码与掩码语言建模的底层逻辑

一、引言:从 BERT 到生成式 AI 的进化之路 科学的突破从来不是孤立的奇迹,而是人类知识长河中无数基石的累积。 当我们惊叹于 ChatGPT、Google Bard 等大型语言模型(LLM)在生成式 AI 领域的惊人表现时,不能不回溯到 20…

【OpenCV基础 1】几何变换、形态学处理、阈值分割、区域提取和脱敏处理

目录 一、图像几何变化 1、对图片进行放大、缩小、水平放大和垂直放大 2、旋转、缩放、控制画布大小 二、图像形态学处理 1、梯度运算 2、闭运算 3、礼帽运算 4、黑帽运算 三、图像阈值分割 1、二值化处理 2、反二值化处理 3、截断阈值处理 4、超阈值零处理 5、低…

CSS- 4.4 固定定位(fixed) 咖啡售卖官网实例

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…

得力标签打印机系统集成方案的技术应用与场景实践

一、方案背景与技术特性 在物联网设备管理场景中,标签打印的自动化与效率提升成为企业数字化升级的重要需求。得力标签打印机驱动及系统集成方案,通过技术接口开发与硬件协同,为设备标识管理提供 轻量化对接能力。以下从技术适配性与功能设计…

【通用智能体】Playwright:跨浏览器自动化工具

Playwright:跨浏览器自动化工具 一、Playwright 是什么?二、应用场景及案例场景 1:端到端(E2E)测试场景 2:UI 自动化(表单批量提交)场景 3:页面截图与 PDF 生成场景 4&am…

精准掌控张力动态,重构卷对卷工艺设计

一、MapleSim Web Handling Library仿真和虚拟调试解决方案 在柔性材料加工领域,卷对卷(Roll-to-Roll)工艺的效率与质量直接决定了产品竞争力。如何在高动态生产场景中实现张力稳定、减少断裂风险、优化加工速度,是行业长期面临的…

永磁同步电机公式总结【一】——反电动势、磁链、转矩公式;三项、两项电压方程;坐标表换方程

一、PMSM 电机参数介绍 1.1 转子极数 转子极数 (Rotor Poles) :三相交流电机每组线圈都会产生 N、S 磁极,每个电机每相含有的永磁体磁极个数就是极数。由于磁极是成对出现的,所以电机有 2、4、6、8……极 (偶数)。 未知参数的电机&#xff…

STL - stack 和 queue 及容器适配器模式的介绍

文章目录 1. stack 的介绍和使用1.1 stack 的介绍1.2 stack 的接口及使用1.3 stack 的模拟实现 2. queue 的介绍和使用2.1 queue 的介绍2.2 queue 的接口及使用2.3 queue 的模拟实现 3. priority_queue的介绍和使用3.1 priority_queue 的介绍3.2 priority_queue 的接口及使用3.…

windows 安装gdal实现png转tif,以及栅格拼接

windows 安装gdal实现png转tif,以及栅格拼接 一、安装gdal 网上有很多安装gdal的方法,此处通过osgeo4w安装gdal 1.下载osgeo4w 下载地址 https://trac.osgeo.org/osgeo4w/ 2、安装osgeo4w exe文件安装,前面部分很简单,就不再…

Socket.IO是什么?适用哪些场景?

Socket.IO 详细介绍及适用场景 一、Socket.IO 是什么? Socket.IO 是一个基于事件驱动的 实时通信库,支持双向、低延迟的客户端-服务器交互。它底层结合了 WebSocket 和 HTTP 长轮询 等技术,能够在不同网络环境下自动选择最优传输方式&#x…

深度学习入门:卷积神经网络

目录 1、整体结构2、卷积层2.1 全连接层存在的问题2.2 卷积运算2.3 填充2.4 步幅2.5 3维数据的卷积运算2.6 结合方块思考2.7 批处理 3、池化层4、卷积层和池化层的实现4.1 4维数组4.2 基于im2col的展开4.3 卷积层的实现4.4 池化层的实现 5、CNN的实现6、CNN的可视化6.1 第一层权…

【Odoo】Pycharm导入运行Odoo15

【Odoo】Pycharm导入运行Odoo15 前置准备1. Odoo-15项目下载解压2. PsrtgreSQL数据库 项目导入运行1. 项目导入2. 设置项目内虚拟环境3. 下载项目中依赖4. 修改配置文件odoo.conf 运行Pycharm快捷运行 前置准备 1. Odoo-15项目下载解压 将下载好的项目解压到开发目录下 2. …

pytest框架 - 第二集 allure报告

一、断言assert 二、Pytest 结合 allure-pytest 插件生成美观的 Allure 报告 (1) 安装 allure 环境 安装 allure-pytest 插件:pip install allure-pytest在 github 下载 allure 报告文件 地址:Releases allure-framework/allure2 GitHub下载&#x…

pycharm连接github(详细步骤)

【前提:菜鸟学习的记录过程,如果有不足之处,还请各位大佬大神们指教(感谢)】 1.先安装git 没有安装git的小伙伴,看上一篇安装git的文章。 安装git,2.49.0版本-CSDN博客 打开cmd(…

oracle linux 95 升级openssh 10 和openssl 3.5 过程记录

1. 安装操作系统,注意如果可以选择,选择安装开发工具,主要是后续需要编译安装,需要gcc 编译工具。 2. 安装操作系统后,检查zlib 、zlib-dev是否安装,如果没有,可以使用安装镜像做本地源安装&a…

Text models —— BERT,RoBERTa, BERTweet,LLama

BERT 什么是BERT? BERT,全称Bidirectional Encoder Representations from Transformers,BERT是基于Transformer的Encoder(编码器)结构得来的,因此核心与Transformer一致,都是注意力机制。这种…

【AGI】大模型微调数据集准备

【AGI】大模型微调数据集准备 (1)模型内置特殊字符及提示词模板(2)带有系统提示和Function calling微调数据集格式(3)带有思考过程的微调数据集结构(4)Qwen3混合推理模型构造微调数据…