掌握机器学习中的“瑞士军刀”XGBoost,从入门到实战

news2025/1/25 9:21:41

文章目录

  • 1 XGBoost简介
  • 2 XGBoost的算法优势
  • 3 安装XGBoost库
  • 4 回归模型
  • 5 分类模型
  • 6 XGBoost调参

作为机器学习领域中的“瑞士军刀”,XGBoost在各大数据科学竞赛中屡获佳绩。本篇博客将为大家介绍如何使用Python中的XGBoost库,从入门到实战掌握XGBoost的使用。
image.png

1 XGBoost简介

XGBoost(eXtreme Gradient Boosting)是一种集成学习算法,它可以在分类和回归问题上实现高准确度的预测。XGBoost在各大数据科学竞赛中屡获佳绩,如Kaggle等。XGBoost是一种基于决策树的算法,它使用梯度提升(Gradient Boosting)方法来训练模型。XGBoost的主要优势在于它的速度和准确度,尤其是在大规模数据集上的处理能力。
image.png

XGBoost的核心思想是将多个弱分类器组合成一个强分类器。在每次迭代中,XGBoost通过加权最小化损失函数的方法来拟合模型。与传统的梯度提升算法不同的是,XGBoost在每次迭代中加入了正则化项,以避免过拟合。同时,它还使用了分裂点查找算法和近似算法来提高模型的训练效率。

在构建树模型时,XGBoost采用了一种基于排序的策略来选择最优的分裂点。具体来说,它将数据按特征值排序,并计算每个特征值作为分裂点时的增益值。然后,它选择增益值最大的特征值作为最优的分裂点。这种方法可以大大减少搜索空间,提高训练效率。

另外,XGBoost还使用了近似算法来加速训练过程。在构建树模型时,XGBoost将数据集划分为多个块,并使用直方图算法来近似每个块的分布。这样,它就可以在每个块上快速计算增益值,从而加速模型训练。

一句话总结:XGBoost通过梯度提升算法和正则化项来构建一个性能更好的预测模型。同时,它采用了排序和近似算法来提高训练效率。这些优化措施使得XGBoost在许多实际应用中都表现出了非常优秀的性能。

2 XGBoost的算法优势

首先,XGBoost能够处理大规模的数据集。在传统的机器学习算法中,当数据集变得非常大时,模型的性能往往会急剧下降。而XGBoost通过并行处理和压缩技术,能够处理大量数据,并在处理过程中减少内存占用和计算时间。

其次,XGBoost在处理非线性数据时表现优异。在实际问题中,许多数据都是非线性的,即使传统的线性模型也需要使用复杂的函数来捕捉数据的非线性关系。XGBoost可以自适应地学习非线性关系,并在不增加过拟合的风险的情况下提高模型的准确性。

此外,XGBoost具有很好的鲁棒性。在传统的机器学习算法中,异常值和噪声会对模型的性能造成很大影响,导致模型出现过拟合或欠拟合等问题。而XGBoost使用了基于树的算法,在构建树时将异常值视为叶子节点,从而使模型对异常值更具有鲁棒性。

最后,XGBoost在训练速度和准确性之间取得了很好的平衡。在大规模数据集上训练传统机器学习算法时,往往需要花费很长时间来训练模型,并且模型的准确性也不能保证。而XGBoost可以在短时间内完成模型训练,并且通常能够获得更高的准确性。

3 安装XGBoost库

XGBOOST不包含在sklearn中,因此,在使用XGBoost库之前,需要先安装它。我们可以通过以下命令在Python环境中安装XGBoost:

pip install xgboost

image.png
从其官方文档中,可以看到XGBoost算法支持各类主流语言,我们只需查看Python相关的文档即可。
image.png
这一算法支持GPU运算,Conda 应该能够检测到计算机上是否存在 GPU,如果安装遇到问题,则可以指定安装CPU或GPU版本。

# CPU only
conda install -c conda-forge py-xgboost-cpu
# Use NVIDIA GPU
conda install -c conda-forge py-xgboost-gpu

4 回归模型

接下来,我们将演示如何使用XGBoost库来构建回归模型。我们将使用波士顿房价数据集来演示XGBoost在回归问题上的表现:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
import xgboost as xgb

# 加载波士顿房价数据集
boston = load_boston()
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42)

# 构建XGBoost回归模型
xgb_reg = xgb.XGBRegressor()
xgb_reg.fit(X_train, y_train)

# 预测测试集的结果
y_pred = xgb_reg.predict(X_test)

在上面的代码中,我们首先加载了波士顿房价数据集,并将数据集划分为训练集和测试集。然后,我们使用XGBoost库来构建回归模型,并在测试集上进行预测。

接下来,我们可以通过评估回归模型的性能来评估XGBoost的表现。我们使用R平方和均方误差(MSE)两个指标来评估模型的性能:

from sklearn.metrics import r2_score, mean_squared_error

# 计算R平方和MSE
r2 = r2_score(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)

print('R^2: {:.2f}'.format(r2))
print('MSE: {:.2f}'.format(mse))

我们得到的R平方值为0.92,MSE为2.43。这表明XGBoost在波士顿房价数据集上表现出色,具有高预测准确度。

5 分类模型

除了回归问题,XGBoost还可以用于解决分类问题。我们将使用著名的鸢尾花数据集来演示XGBoost在分类问题上的表现:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import xgboost as xgb

# 加载鸢尾花数据集
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# 构建XGBoost分类模型
xgb_cls = xgb.XGBClassifier()
xgb_cls.fit(X_train, y_train)

# 预测测试集的结果
y_pred = xgb_cls.predict(X_test)

在上面的代码中,我们首先加载了鸢尾花数据集,并将数据集划分为训练集和测试集。然后,我们使用XGBoost库来构建分类模型,并在测试集上进行预测。

接下来,我们可以通过评估分类模型的性能来评估XGBoost的表现。我们使用精度和混淆矩阵两个指标来评估模型的性能:

from sklearn.metrics import accuracy_score, confusion_matrix

# 计算精度和混淆矩阵
accuracy = accuracy_score(y_test, y_pred)
confusion_mat = confusion_matrix(y_test, y_pred)

print('Accuracy: {:.2f}'.format(accuracy))
print('Confusion matrix:\n', confusion_mat)

我们得到的精度值为0.97,混淆矩阵表明XGBoost在鸢尾花数据集上表现出色,具有高预测准确度。

6 XGBoost调参

在使用XGBoost库构建模型时,调参是非常重要的。XGBoost有许多参数可以调整,包括树的深度、学习率、正则化参数等等。我们可以使用交叉验证和网格搜索来调整参数,以获得更好的性能。

以下是一个使用网格搜索调整XGBoost参数的示例:

from sklearn.model_selection import GridSearchCV

# 定义XGBoost分类器
xgb_cls = xgb.XGBClassifier()

# 定义参数范围
param_grid = {
    'max_depth': [3, 4, 5],
    'learning_rate': [0.1, 0.01, 0.001],
    'n_estimators': [50, 100, 200],
    'reg_alpha': [0, 0.1, 0.5, 1],
    'reg_lambda': [0, 0.1, 0.5, 1]
}

# 执行网格搜索
grid_search = GridSearchCV(xgb_cls, param_grid=param_grid, cv=3)
grid_search.fit(X_train, y_train)

# 输出最佳参数和对应的最佳值:
print('Best parameters:', grid_search.best_params_)
print('Best score:', grid_search.best_score_)

执行上述代码后,我们可以得到最佳参数和对应的最佳得分。这里我们使用了3折交叉验证来评估模型的性能。

XGBoost是一种非常流行的机器学习算法,它在大规模数据集和各种类型的问题上都表现出色。在本文中,我们介绍了XGBoost的基本原理和常用的Python代码示例。我们还演示了如何使用XGBoost库解决回归和分类问题,并展示了如何使用交叉验证和网格搜索来调整XGBoost的参数。如果你正在寻找一种快速而强大的机器学习算法来解决自己的问题,那么XGBoost可能是一个很好的选择。

image.png

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

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

相关文章

iot-Scada免费Scada组态软件系列教程4-二次开发与版本部署

iot-Scada免费Scada组态软件系列教程 系列文章目录 iot-Scada免费Scada组态软件系列教程1-初识iot-Scada iot-Scada免费Scada组态软件系列教程2-架构设计 iot-Scada免费Scada组态软件系列教程3-各模块详细介绍 iot-Scada免费Scada组态软件系列教程4-二次开发与版本部署 前言…

p73 应急响应-WEB 分析 phpjavaweb自动化工具

数据来源 应急响应: 保护阶段(护案发现场,断网防止持续渗透,数据备份恢复),分析阶段(找到漏洞),复现阶段(复现攻击过程),修复阶段&am…

QML控件--DialogButtonBox

文章目录一、控件基本信息二、控件使用三、属性成员四、附加属性成员五、成员函数六、信号一、控件基本信息 Import Statement:import QtQuick.Controls 2.14 Since:Qt 5.8 Inherits:Container 二、控件使用 DialogButtonBox:是…

基于 VITA57.4 标准的单通道 6GSPS 12 位采样 ADC,单通道 6GSPS 16 位采样 DAC 子卡模块

概述 FMC147 是一款单通道 6.4GSPS(或者配置成 2 通道 3.2GSPS)采样率的 12 位 AD 采集、单通道 6GSPS(或配置成 2 通道 3GSPS) 采样率 16 位 DA 输出子卡模块,该板卡为 FMC标准,符合 VITA57.4 规范&#x…

业务项目管理软件使用推荐

使用Zoho Projects的运营项目管理简化任务并最大限度地利用资源,该管理已被全球200,000多家公司选中。 一、带领您的团队取得更好的成果 Zoho Projects的多功能业务项目管理软件可帮助您的团队在所有运营流程中保持一致。监控您的运营团队的工作流程以确保每个项目顺…

IGKBoard(imx6ull)-Linux下TTY串口编程

文章目录一、TTY介绍(1)理解tty(2)tty设备节点二、tty串口应用编程(1)串口基本操作【1】打开串口【1】读写数据【1】关闭串口(2)termios 结构体(配置)&#x…

如何处理后端返回的复杂数据

将接口的复杂数据结构映射成简单的数据结构 假设我们有一个API,返回以下数据: {"id": 1,"name": "Example API","process_params": {"param1": {"name": "Parameter 1","…

企业数字化转型有哪些好处?

从马车到汽车,从写信到智能手机,每一次技术革新所带来的都是生产力大发展,小到个人、家庭,大到企业、国家,都在每一轮技术革新中获得了好处。 可以说,现在的企业数字化转型,就像是企业管理“工具…

从0学习stm32

1.STM32介绍: ST:指的是意法半导体; M:指定微处理器 使用的是ARMCortex-M3 ARM分成三个系列: Cortex-A: 针对多媒体应用(手机) Cortex-R:针对对实时性和性能有一定要求的场景 Cortex-M:针对低功耗高性…

基于html+css的自适应展示4

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【案例实践】R语言多元数据统计分析在生态环境中的实践应用

查看原文>>>R语言生物群落分析绘图、多元统计分析、CMIP6、遥感碳储量、GEE林业、InVEST等 生态环境领域研究中常常面对众多的不同类型的数据或变量,当要同时分析多个因变量(y)时需要用到多元统计分析(multivariate sta…

vite+vue3+ts搭建项目八(打包性能优化三:使用CDN)

vitevue3ts搭建项目八(打包性能优化三:使用CDN) 本文目录vitevue3ts搭建项目八(打包性能优化三:使用CDN)使用vite-plugin-cdn-import下载npm包在vite.config.ts中通过importToCDN引入CDN参数获取方式可用的…

【事务】本地事务和分布式事务的区别

整理下事务相关的知识点: 文章目录一、事务MySQL事务事务的实现事务的ACID特性事务的隔离级别二、本地事务三、分布式事务认识分布式事务CAP理论BASE理论一、事务 先复习下数据库中学到的事务: MySQL事务 一个事务即一个完整的业务逻辑,如…

计算机组成原理——第三章存储系统(下)

提示:年年岁岁花相似,岁岁年年人不同 文章目录3.4.1 磁盘存储器3.4.2 固态硬盘SSD3.5.1 Cache的基本概念和原理3.5.2 Cache和主存的映射方式3.5.3 Cache替换算法3.5.4 Cache写策略3.6.1 页式存储3.6.2 虚拟存储器3.4.1 磁盘存储器 我们在磁性盘面上涂磁…

【hello Linux】Linux下 gitee 的使用

目录 1. 安装 git 2. gitee 的使用 2.1 注册 gitee 账号 2.2 创建项目:也就是仓库 2.3 下载项目到本地 3. 上传gitee三步走 3.1 三板斧第一招:git add 3.2 三板斧第二招:git commit 3.3 三板斧第三招:git push Linux&#x1f337…

【JavaEE】Spring项目的创建与使用

目录 创建Spring项目 创建Maven项目 引入依赖 使用镜像下载 下载依赖 添加启动类 使用Spring项目 创建Spring配置文件 存储Bean 取出并使用Bean(通过ApplicationContext接口) 通过id 通过class 通过classid(推荐) 取出并使用Bean(通过BeanFactory接口) Applicat…

从零入门激光SLAM(六)——ROS常用工具箱

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激…

【react 全家桶】组合组件

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录09 【组合组件】1.包含关系2.特例关系问题…

P3369 【模板】普通平衡树(FHQ Treap树构建和解析)

题目描述 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一些数&#xff0c;其中需要提供以下操作&#xff1a; 插入 x 数删除 x 数(若有多个相同的数&#xff0c;应只删除一个)查询 x 数的排名(排名定义为比当前数小的数的个数 1 )查询排名…

【Kafka-Kerberos下执行shell命令】Kafka在Kerberos环境下如何操作shell命令

【Kafka-Kerberos下执行shell命令】Kafka在Kerberos环境下如何操作shell命令1&#xff09;jaas.conf2&#xff09;client.properties3&#xff09;执行命令当大数据集群部署了 Kerberos 认证操作之后&#xff0c;在服务器上操作 kafka shell 命令就会出现认证相关的异常&#x…