Python28-9 XGBoost算法

图片

XGBoost(eXtreme Gradient Boosting,其正确拼写应该是 "Extreme Gradient Boosting",而XGBoost 的作者在命名时故意使用了不规范的拼写,将“eXtreme”中的“X”大写,以突出其极限性能和效率)是一个用于回归和分类问题的高效且灵活的增强树(Boosting Tree)工具。它是梯度提升(Gradient Boosting)算法的一种改进版本,具有更高的效率、灵活性和准确性。XGBoost在处理大规模数据集时表现尤为出色,常用于机器学习竞赛和实际应用中。它的主要特点包括正则化、并行计算、自动处理缺失值和自定义目标函数。

XGBoost的数学原理

XGBoost的目标是最小化以下目标函数:

其中,包括树的复杂度:

是树节点的数目惩罚系数,是权重的L2正则化项。

在每一轮迭代中,XGBoost通过添加新树来改进模型,新树的构建基于前一轮模型的残差和梯度信息。

Python实例

以下是一个使用XGBoost进行回归任务的可视化示例。我们将使用波士顿房价数据集,展示模型训练过程中的特征重要性和误差随迭代次数的变化。

安装XGBoost

首先,需要安装XGBoost库:

pip install xgboost
示例代码

我们使用XGBoost对加利福尼亚房价数据集进行回归分析。

加利福尼亚房价数据集包含以下特征,分别对应f1-f8:

  1. MedInc - Median income in block group: 每个街区的中位收入

  2. HouseAge - Median house age in block group: 每个街区的中位房龄

  3. AveRooms - Average number of rooms per household: 每个家庭的平均房间数

  4. AveBedrms - Average number of bedrooms per household: 每个家庭的平均卧室数

  5. Population - Block group population: 每个街区的人口数量

  6. AveOccup - Average number of household members: 每个家庭的平均成员数

  7. Latitude - Block group latitude: 街区的纬度

  8. Longitude - Block group longitude: 街区的经度

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from xgboost import XGBRegressor, plot_importance
from sklearn.metrics import mean_squared_error# 加载加利福尼亚房价数据集
california = fetch_california_housing()
X = california.data
y = california.target# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建XGBoost回归器
xgb = XGBRegressor(n_estimators=200, learning_rate=0.1, max_depth=3, random_state=42)# 训练模型
xgb.fit(X_train, y_train, eval_set=[(X_train, y_train), (X_test, y_test)], eval_metric='rmse', verbose=False)# 预测训练集和测试集
y_train_pred = xgb.predict(X_train)
y_test_pred = xgb.predict(X_test)# 计算训练误差和测试误差
train_mse = mean_squared_error(y_train, y_train_pred)
test_mse = mean_squared_error(y_test, y_test_pred)
print(f"Train Mean Squared Error: {train_mse}")
print(f"Test Mean Squared Error: {test_mse}")# 绘制特征重要性图
plot_importance(xgb)
plt.title('Feature Importance')
plt.show()# 绘制训练过程中树的数量与均方误差的关系
results = xgb.evals_result()
epochs = len(results['validation_0']['rmse'])
x_axis = range(0, epochs)fig, ax = plt.subplots()
ax.plot(x_axis, results['validation_0']['rmse'], label='Train')
ax.plot(x_axis, results['validation_1']['rmse'], label='Test')
ax.legend()
plt.xlabel('Number of Trees')
plt.ylabel('Root Mean Squared Error')
plt.title('XGBoost RMSE vs. Number of Trees')
plt.show()

图片

在XGBoost特征重要性图中,F score(或称为Feature score)是一个用于衡量每个特征对模型贡献的指标。具体来说,F score 表示特征在所有树的分裂节点中被使用的次数。分数越高,表示该特征在模型中更为重要。

图片

训练误差曲线:不断下降,因为模型通过增加更多的决策树来逐步拟合训练数据。到达一定程度后,模型会几乎完全拟合训练数据,导致训练误差接近于零。

测试误差曲线:在初始阶段,测试误差会随着树的数量增加而减少,表明模型在逐步学习数据中的模式。然而,当树的数量超过某个临界点后,测试误差可能开始上升,这表明模型开始过拟合训练数据,导致在测试集上的性能下降,这种情况并未在本实例中出现。

说明
  1. 数据加载和预处理

    • 使用 fetch_california_housing 函数加载加利福尼亚房价数据集。

    • 将数据分为训练集和测试集。

  2. 创建和训练XGBoost模型

    • 使用 XGBRegressor 创建XGBoost回归器。

    • 在训练模型时,通过 eval_set 指定评估数据集,并通过 eval_metric 指定评估指标(RMSE)。

  3. 计算和打印误差

    • 计算并打印训练集和测试集上的均方误差(MSE)。

  4. 绘制特征重要性图

    • 使用 plot_importance 函数绘制特征重要性图,展示每个特征对模型的贡献。

  5. 绘制训练过程的误差变化

    • 使用 evals_result 方法获取模型在训练过程中的误差变化。

    • 绘制树的数量与均方误差(RMSE)之间的关系图。

通过这样的可视化分析,可以更好地理解XGBoost模型的训练过程和特征重要性,从而进行模型优化和改进。

以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

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

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

相关文章

概论(二)随机变量

1.名词解释 1.1 样本空间 一次具体实验中所有可能出现的结果,构成一个样本空间。 1.2 随机变量 把结果抽象成数值,结果和数值的对应关系就形成了随机变量X。例如把抛一次硬币的结果,正面记为1,反面记为0。有变量相对应的就有自…

基于字典学习的地震数据降噪(MATLAB R2021B)

稀疏表示基于研究者们提出了许多变换基函数的方法逐渐成型,比如小波域,曲波域,dreamlet 域等,其原理是利用地震信号在变换域内的稀疏性和可分离性以去除噪声。继 Donoho发表非线性去噪方法-小波阈值萎缩方法,在后续的研…

HackTheBox--Headless

Headless测试过程 1 信息收集 NMAP端口扫描 nmap -sSCV 10.10.11.85000端口测试 检查页面功能,请求 For questions 功能,跳转到 /support 目录 目录扫描 发现 /dashboard 目录 访问 /dashboard 目录,显示未认证,如果通过认证…

MySQL之备份与恢复和MySQL用户工具(一)

备份与恢复 备份脚本化 为备份写一些脚本是标准做法。展示一个示例程序,其中必定有很多辅助内容,这只会增加篇幅,在这里我们更愿意列举一些典型的备份脚本功能,展示一些Perl脚本的代码片段。你可以把这些当作可重用的代码块&…

图解 RocketMQ 架构

写在前面 Kafka、RocketMQ都是很出名的中间件,上次我们讲解了Kafka,这次我们来讲讲RocketMQ的原理。 基本架构图 解析 RocketMQ 总共可以分成四个模块 NameServer:提供服务发现和路由功能,管理各种元数据信息。Broker&#xf…

基于最大相邻夹角的边缘点提取(matlab)

1、背景介绍 边缘点是指点云数据中代表物体或场景几何形状突变的那些点。在三维点云中,边缘点通常标志着不同表面或物体的分界,或者是物体表面上的不规则性,如裂缝、棱角、突起等。点云边缘检测的作用非常重要,最常见是进行特征点…

php校园二手交易网站-计算机毕业设计源码041148

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 校园二手交易网站系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结…

基于AOP的数据字典实现:实现前端下拉框的可配置更新

作者:后端小肥肠 创作不易,未经允许严禁转载。 目录 1. 前言 2. 数据字典 2.1. 数据字典简介 2.2. 数据字典如何管理各模块的下拉框 3. 数据字典核心内容解读 3.1. 表结构 3.2. 核心代码 3.2.1. 根据实体类名称获取下属数据字典 3.2.2. 数据字…

回顾 DTC 2024 大会——聚焦数据技术创新:揭秘下一代纯实时搜索引擎 INFINI Pizza

2024 年 4 月 12 日至 13 日,备受瞩目的第十三届“数据技术嘉年华”(DTC2024)在北京新云南皇冠假日酒店盛大开幕。本次大会由中国 DBA 联盟(ACDU)与墨天轮社区联合主办,以“智能云原生一体化——DB 与 AI 协…

在先企业字号被申请注册成商标!

今天一网友联系普推商标知产老杨,说自己注册的商标被某公司无效宣告了,去年联系老杨时,当时就给说这个商标名称存在风险,与别人的字号权存在高度近似,而且是同行业同地区在后面注册的。 十几年前某公司先成功注册成字号…

Ubuntu 安装CGAL

一、什么是CGAL CGAL(Computational Geometry Algorithms Library)是一个广泛使用的开源库,主要用于计算几何算法的实现。该库提供了一系列高效、可靠和易于使用的几何算法和数据结构,适用于各种应用领域。以下是 CGAL 的主要功能…

JD-GUI下载和使用

JD-GUI是专门查看jar包的,包括source.jar和doc.jar。JD-GUI可以把.class文件反编译为可编辑的.java文件,有图形化界面。 github下载地址:https://github.com/java-decompiler/jd-gui/releases 下载windows版本的zip包,如下图&…

智能化代码审查系统设计

设计一个智能化代码审查系统,特别是针对Java开发,需要综合考虑多个维度来提升代码质量、提高审查效率,并促进团队间的协作。以下是该系统设计的关键要素和功能特性: 系统架构 客户端-服务器架构:前端提供友好的Web界面…

破局 AI 2.0 时代:利用 AI 提升自我核心竞争力

文章目录 破局 AI 2.0 时代:利用 AI 提升自我核心竞争力1. AI 2.0 时代1.1 特点1.2 发展1.3 影响 2. AI 2.0 时代的机遇 & 挑战2.1 AI 对行业市场的冲击2.2 挑战变为机遇2.3 不同场景下的 AI 效能提升2.3.1 自动化办公任务2.3.2 提升学习效率2.3.3 创意生成与内…

LabVIEW光谱测试系统

在现代光通信系统中,光谱分析是不可或缺的工具。开发了一种基于LabVIEW的高分辨率光谱测试系统,通过对可调谐激光器、可编程光滤波器和数据采集系统的控制,实现了高效、高精度的光谱测量。 项目背景 随着光通信技术的迅速发展,对…

仿哔哩哔哩视频app小程序模板源码

仿哔哩哔哩视频app小程序模板源码 粉色的哔哩哔哩手机视频网页,多媒体视频类微信小程序ui前端模板下载。包含:视频主页和播放详情页。 仿哔哩哔哩视频app小程序模板源码

thinkphp6/8 验证码

html和后台验证代码按官方来操作 ThinkPHP官方手册 注意: 如果验证一直失败,看看Session是否开启, 打印dump(session_status());结果2为正确的, PHP_SESSION_DISABLED: Session功能被禁用(返回值为0)。…

科普文:一文搞懂jvm实战(四)深入理解逃逸分析Escape Analysis

概叙 Java 中的对象是否都分配在堆内存中? 好了太抽象了,那具体一点,看看下面这个对象是在哪里分配内存? public void test() { Object object new Object(); }这个方法中的object对象,是在堆中分配内存么&#xff1…

【C语言】C语言编译链接和Win32API简单介绍

目录 翻译环境和运行环境翻译环境编译器预处理(预编译)编译链接 执行环境 Win32API是什么控制台程序控制台获取坐标COORDGetStdHandle函数GetConsoleCursorinfo函数CONSOLE_CURSOR_INFOSetConsoleCursorInfo函数SetConsoleCursorPostion函数GetAsyncKeyS…

Qt(MSVC)下报“语法错误缺少“}““语法错误缺少“常数“ 的解决办法

1.现象 目前我在工程中试图使用QHttpServer时,一编译,就报了一堆奇奇怪怪的错误: D:\Qt\httpServer\Qt5.15.2\include\QtHttpServer\qhttpserverrequest.h:75: error: C2143: 语法错误: 缺少“}”(在“(”的前面) D:\Qt\httpServer\Qt5.15.…