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.rhkb.cn/news/371556.html

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

相关文章

探索多模态预训练:MAnTiS、ActionCLIP、CPT与CoOp的Prompt技巧

上一篇博文整理了 预训练新范式(Prompt-tuning,Prefix-tuning,P-tuning) ,主要是围绕NLP上的成果,具体的概念本文也不做过多赘述。本篇文章将主要整理几篇有代表性的Prompt方法在多模态领域中的应用。 Mult…

普中51单片机:数码管显示原理与实现详解(四)

文章目录 引言数码管的结构数码管的工作原理静态数码管电路图开发板IO连接图代码演示 动态数码管实现步骤数码管驱动方式电路图开发板IO连接图真值表代码演示1代码演示2代码演示3 引言 数码管(Seven-Segment Display)是一种常见的显示设备,广…

C-11 三角剖分的调研

C-11 三角剖分算法 三角剖分就是将输入的多边形,分割成一系列互不重叠的三角形,其重要性就在这不多赘述。这个是一个别人总结的链接:http://vterrain.org/Implementation/Libs/triangulate.html 图片链接:http://www-cgrl.cs.m…

【笔记】在window上连接虚拟机中的redis

愚昧啊 困扰了我近两天的问题居然是因为是java代码写错地方了 在虚拟机中进入redis.conf文件 vim redis.conf /bind --斜杠搜索关键词 将值设置为 bind 0.0.0.0 保存 退出:wq 回到java中 添加redis依赖 刷新maven 就是在这一步出问题……………………………………自己在蓝…

新型水冷电阻设计-双面水冷电阻器

一款革命性的电阻器,专为低压和中压应用而设计,尤其是汽车、牵引或船舶系统中的恶劣条件。 EAK采用先进材料制造,采用专利设计,将电阻元件与水基冷却液封装并完全分离,为水冷应用提供模块化、轻量级、小容量、高功率解…

PYTHON自学笔记(一)vscode配置

安装python 自行官网下载 安装vscode 自行官网下载 环境变量设置 把python和scripts的文件路径,添加到环境变量的path中,如图: 此项不弄,在命令行模式中系统不会认为你装了python和pip,你的输入相关命令shell不会…

【Elasticsearch】Elasticsearch倒排索引详解

文章目录 📑引言一、倒排索引简介二、倒排索引的基本结构三、Elasticsearch中的倒排索引3.1 索引和文档3.2 创建倒排索引3.3 倒排索引的存储结构3.4 词典和倒排列表的优化 四、倒排索引的查询过程4.1 过程4.2 示例 五、倒排索引的优缺点5.1 优点5.2 缺点 六、倒排索…

ComfyUI+MuseV+MuseTalk图片数字人

电脑配置 GPU12G,如果自己电脑配置不够,选择云gpu,我就是用的这个,自己电脑太老配置跟不上 环境: Python 3.11.8 torch 2.2.1 cuda_12.1 资源提供: 链接:https://pan.baidu.com/s/1_idZbF…

subset使用

在R语言中,subset()函数用于从数据框中选择满足特定条件的观测。其语法如下: subset(x, subset, select, drop FALSE) 参数说明: x:数据框或矩阵。 subset:逻辑条件,用于筛选满足特定条件的行。 select…

MySQL—统计函数和数学函数以及GROUP BY配合HAVING

合计/统计函数 count -- 演示 mysql 的统计函数的使用 -- 统计一个班级共有多少学生? SELECT COUNT(*) FROM student -- 统计数学成绩大于 90 的学生有多少个? SELECT COUNT(*) FROM student WHERE math > 90 -- 统计总分大于 250 的人数有多少&…

axios和Mybatis

除了get和post方法还有其他的方法: 发送 PUT 请求 发送 PUT 请求通常用于更新服务器上的资源。 const updateData {title: foo updated,body: bar updated,userId: 1 };axios.put(https://jsonplaceholder.typicode.com/posts/1, updateData).then(function (res…

麦蕊智数,,另外一个提供免费的股票数据API,可以通过其提供的接口获取实时和历史的股票数据。

麦蕊智数,,提供免费的股票数据API,可以通过其提供的接口获取实时和历史的股票数据。 API接口:http://api.mairui.club/hslt/new/您的licence 备用接口:http://api1.mairui.club/hslt/new/您的licence 请求频率&#x…

Node.js_fs模块

文件删除 文件重命名和移动(本质都是修改路径) 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) (打印出来是该文件夹下名称的数组形式) 读取当前的文件夹(readdir) 删除文件夹 (rmdir) 查看资源状态…

Golang | Leetcode Golang题解之第222题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; func countNodes(root *TreeNode) int {if root nil {return 0}level : 0for node : root; node.Left ! nil; node node.Left {level}return sort.Search(1<<(level1), func(k int) bool {if k < 1<<level {return false}…

Apache Seata新特性支持 -- undo_log压缩

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Apache Seata新特性支持 – undo_log压缩 Seata新特性支持 – undo_log压缩 现状 & 痛点…

线程池理解及7个参数

定义理解 线程池其实是一种池化的技术实现&#xff0c;池化技术的核心思想就是实现资源的复用&#xff0c;避免资源的重复创建和销毁带来的性能开销。线程池可以管理一堆线程&#xff0c;让线程执行完任务之后不进行销毁&#xff0c;而是继续去处理其它线程已经提交的任务。 …

20、matlab信号波形生成:狄利克雷函数、高斯脉冲和高斯脉冲序列

1、名词说明 狄利克雷函数&#xff08;Dirac Delta Function&#xff09; 狄利克雷函数&#xff0c;也称为单位冲激函数或δ函数&#xff0c;是一个在数学和信号处理中常用的特殊函数。狄利克雷函数通常用符号δ(t)表示&#xff0c;其定义为&#xff1a; δ(t) { ∞, t 0{…

RabbitMq - Java客户端基础【简单案例 +Work模型】

目录 1、前置知识 1.1、AMQP怎么理解 1.2、Spring AMQP是什么 1.3、为什么要了解Spring-AMQP&#xff1f; 2、使用Spring-AMQP实现一个发消息案例 3、Work模型 问题&#xff1a; 优化&#xff1a; 小结&#xff1a;Work模型的使用&#xff1a; 1、前置知识 1.1、AMQP怎…

简介空间复杂度

我们承接上一篇博客。我们写了时间复杂度之后&#xff0c;我们就要来介绍一下另一个相关复杂度了。空间复杂度。我觉得大家应该对空间复杂度认识可能比较少一些。我就是这样&#xff0c;我很少看见题目中有明确要求过空间复杂度的。但确实有这个是我们不可忽视的&#xff0c;所…

ID3算法决策树

步骤&#xff1a; 先计算出信息量&#xff1b;信息熵&#xff1b;信息增量&#xff1b; 再比较信息增量的大小&#xff0c;确定分类依据。 信息量&#xff1a; 信息熵&#xff1a; 信息增益&#xff1a;