数据清洗-缺失值填充-XGboost算法填充

目录

  • 一、安装所需的python包
  • 二、采用XGboost算法进行缺失值填充
    • 2.1可直接运行代码
    • 2.2以某个缺失值数据进行实战
      • 2.2.1 代码运行过程截屏:
      • 2.2.2 填充后的数据截屏:
  • 三、XGBoost算法原理介绍
    • 3.1 XGBoost 的定义
    • 3.2 XGBoost 的核心思想
    • 3.3 XGBoost 的特点
    • 3.4 XGBoost 的工作原理
    • 3.5 XGBoost 的损失函数
    • 3.6 XGBoost 的参数
    • 3.7 XGBoost 的应用场景
    • 3.8 XGBoost 的优缺点
      • 3.8.1优点
      • 3.8.2缺点

感觉大家对原理性的东西不太感兴趣,那我就直接举例提供代码,以及详细的注释,大家自己对照改代码应用于你自己建立的模型吧。

这些代码全部是我自己做数模竞赛时候自己用的代码。可以直接运行,记得修改文件路径。

一、安装所需的python包

pip install pandas
pip install numpy
pip install scikit-learn
pip install xgboost

二、采用XGboost算法进行缺失值填充

注意代码需要把自己的数据文件格式转换为CSV文件,并且把路径修改为自己文件所在的路径,不会转换的参考我此教程文件格式转换:EXCEL和CSV文件格式互相转换。

我知道大家对原理性的东西不感兴趣,我把他的原理介绍放在文末,需要写论文的同学自己拿去用,记得修改,否则查重率过不去。

2.1可直接运行代码

"""
XGBoost算法填补缺失值,这个精度比随机森林高
基本上在缺失值附近的数据旁边了
"""import pandas as pd
import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from xgboost import XGBRegressor# 读取你的数据
data = pd.read_csv('缺失值填充.csv')  # 替换为你的文件名# 创建一个基于XGBoost的多重插补模型
xgb_reg = XGBRegressor(random_state=0)
imputer = IterativeImputer(random_state=0, estimator=xgb_reg)# 将数据中的NaN值使用XGBoost插补
data_imputed = imputer.fit_transform(data)# 保存填充后的数据
imputed_df = pd.DataFrame(data_imputed, columns=data.columns)
imputed_df.to_csv('XGBoost算法填充.csv', index=False)print(imputed_df)

注意:data = pd.read_csv('缺失值填充.csv')里面的缺失值填充.csv是你自己的缺失值的csv文件路径,imputed_df.to_csv('XGBoost算法填充.csv', index=False)中的XGBoost算法填充.csv是你填充后的文件名,你可以自己起名。

2.2以某个缺失值数据进行实战

注意:数据量较少,由自己构建,均有规律,
如下图:
在这里插入图片描述

构造缺失值,如下图:
在这里插入图片描述

运行代码查看填充后的数据怎么样,
运行代码如下图+填充后的截图:

2.2.1 代码运行过程截屏:

在这里插入图片描述

2.2.2 填充后的数据截屏:

在这里插入图片描述

说明:对于这种数据量小的,像XGBoost算法填充的效果略差,使用前面的牛顿插值法即可。对于数据量大的,可以使用神经网络遗传算法来进行缺失值填充,下面我将会介绍对XGBOOST算法的参数进行优化的改进算法进行缺失值填充,但是你在进行数模比赛时候,需要说明为什么你要选用该算法填充,说明他的原理即可,不必纠结填充的数据是否正确,因为你本身也不知道数据的正确性。

接下来我将继续分享其他我参加数模时候常用的几种数据填充的代码,都是我自己调试跑通过的,大家直接复制粘贴使用。

三、XGBoost算法原理介绍

3.1 XGBoost 的定义

XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升的机器学习算法,由 Tianqi Chen 在 2016 年提出。相比其他梯度提升算法,XGBoost 在速度和性能上有显著的提升。XGBoost 是一种集成学习方法,通过组合多个弱学习器(通常是决策树)来构建一个强大的预测模型。

3.2 XGBoost 的核心思想

XGBoost 属于 梯度提升树(Gradient Boosting Decision Trees, GBDT) 的一种扩展和优化。GBDT 的基本思想是将多个弱学习器(通常是决策树)逐步叠加,通过最小化损失函数来提高模型的准确性。XGBoost 在此基础上进行了多种优化和增强,使得算法在计算速度、内存效率和准确性上都有显著提升。

3.3 XGBoost 的特点

  1. 正则化处理:XGBoost 引入了正则化项(L1 和 L2 正则化),可以有效防止过拟合。
  2. 并行计算:XGBoost 支持并行化的树构建过程,利用多核 CPU 加速计算。
  3. 分块结构:采用分块结构处理数据,可以高效利用内存,适合处理大规模数据集。
  4. 缺失值处理:XGBoost 可以自动处理数据中的缺失值,在训练过程中找到最优化的分裂方向。
  5. 自定义损失函数:支持多种损失函数(如平方误差、逻辑回归损失)以及用户自定义损失函数。
  6. 树剪枝(Pruning):采用后向贪心算法进行树剪枝,减少不必要的复杂度。
  7. 内置交叉验证:内置了交叉验证方法,可以自动在训练过程中找到最佳的模型参数。

3.4 XGBoost 的工作原理

  1. 初始化模型:首先用一个常数值(如训练数据的平均值)初始化模型。
  2. 迭代训练:在每一轮迭代中:
    • 计算模型的残差(即当前模型的预测值与实际值之间的差距)。
    • 使用残差训练一个新的弱学习器(通常是决策树),使其能够拟合这些残差。
    • 将新的弱学习器加到现有模型中,更新模型的预测结果。
    • 重复上述步骤,直到达到预设的弱学习器数量或其他停止条件。
  3. 组合模型:将所有弱学习器的结果加权求和,得到最终的预测模型。

3.5 XGBoost 的损失函数

XGBoost 可以使用多种损失函数,例如:

  • 均方误差(MSE):用于回归问题。
  • 对数损失(Log Loss):用于分类问题。
  • 自定义损失函数:用户可以根据特定需求定义自己的损失函数。

3.6 XGBoost 的参数

XGBoost 有许多参数可以调整,主要分为以下几类:

  1. 通用参数:控制 XGBoost 的通用功能,如 booster(指定使用哪种基学习器),nthread(用于控制并行线程数量)等。
  2. Booster 参数:控制单个 Booster(基学习器)的行为,如 eta(学习率),max_depth(树的最大深度),subsample(子样本比例)等。
  3. 任务参数:控制 XGBoost 如何执行特定的学习任务,如 objective(指定学习任务和相应的损失函数),eval_metric(指定评价指标)等。

3.7 XGBoost 的应用场景

XGBoost 广泛应用于以下领域:

  • 回归分析:预测数值型目标变量。
  • 分类问题:预测类别型目标变量(如二分类和多分类)。
  • 排序问题:如在信息检索中的排序任务。
  • 时间序列预测:预测时间序列中的未来值。

3.8 XGBoost 的优缺点

3.8.1优点

  • 高效:计算速度快,内存占用少。
  • 灵活:支持多种数据类型和损失函数。
  • 准确:正则化处理和防止过拟合的特性使得模型的表现更加稳健。
  • 可解释性:生成的树模型可以直观理解和解释。

3.8.2缺点

  • 参数调优复杂:需要较多的参数调整来实现最佳性能。
  • 对小数据集不适用:在数据量较小的情况下,无法显著优于简单模型。
  • 对异常值敏感:异常值可能会对模型性能产生较大影响,需要进行预处理。

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

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

相关文章

2024 批量下载知乎回答/文章/想法/专栏/视频/收藏夹,导出 excel 和 pdf

之前分享过文章 2024批量下载知乎回答文章想法专栏收藏夹,公众号文章内容图片封面视频音频,微博内容图片视频评论转发数据,导出excel和pdf ,今天再整理分享下知乎知乎回答/文章/想法/专栏/视频/收藏夹下载。 苏生不惑 这个账号已…

Jenkins基于tag的构建

文章目录 Jenkins参数化构建设置设置gitlab tag在工程中维护构建的版本按指定tag的版本启动服务 Jenkins参数化构建设置 选择参数化构建: 在gradle构建之前,增加执行shell的步骤: 把新增的shell框挪到gradle构建之前, 最后保存 …

驱动器磁盘未格式化难题:深度剖析与恢复实践

驱动器磁盘未格式化的深层探索 在数据存储与管理的日常中,驱动器作为我们数字生活的基石,其稳定性直接关系到数据的安全与可用性。然而,当屏幕上赫然出现“驱动器中的磁盘未被格式化”的提示时,许多用户往往感到手足无措&#xf…

Linux 文件与目录操作命令详解

文章目录 前言创建文件1. touch2. vim 文件内容显示3. cat4. more5. less6. head7. tail 文件(目录)复制、删除和移动8. cp9. rm10. mv 压缩文件与解压缩11. gzip12. zip 和 unzip 创建目录13. mkdir 删除目录14. rmdir 改变工作目录15. cd16. pwd 显示目…

【C语言】联合体枚举的讲解

目录 ✨声明!!!: 联合体与结构体只有一个区别,那就是内存存储方式不同 💕1.联合体的声明 💕2.联合体内存的存储 💕3.联合体字节大小的计算 例题2: ✨4.枚举的声明…

全面掌握 Jest:从零开始的测试指南(下篇)

在上一篇测试指南中,我们介绍了Jest 的背景、如何初始化项目、常用的匹配器语法以及钩子函数的使用。这一篇篇将继续深入探讨 Jest 的高级特性,包括 Mock 函数、异步请求的处理、Mock 请求的模拟、类的模拟以及定时器的模拟、snapshot 的使用。通过这些技…

list从0到1的突破

目录 前言 1.list的介绍 2.list的常见接口 2.1 构造函数( (constructor)) 接口说明 2.2 list iterator 的使用 2.3 list capacity 2.4 list element access 2.5 list modifiers 3.list的迭代器失效 附整套练习源码 结束语 前言 前面我们学习…

一款源码阅读的插件

文章目录 进度汇报功能预览添加高亮标记高亮风格设置笔记颜色设置数据概览高亮数据详情 结尾 进度汇报 之前提到最近有在开发一个源码阅读的IDEA插件,第一版已经开发完上传插件市场了,等官方审批通过就可以尝鲜了。插件名称:Mark source cod…

防火墙——NAT

目录 NAT NAT分类 旧分类 新分类 NAT配置 源NAT​编辑 配置源NAT地址池​编辑 关于源NAT环路问题 环境如下​编辑 防火墙nat​编辑​编辑 路由器要配置指向11.0.0.0 网段的静态路由​编辑 测试​编辑 如果此时有外网用户直接pingNAT地址,则环路出现。​…

PAT甲级-1016 Phone Bills

题目 题目大意 顾客打长途电话计费,输出每月的账单。输入一行给出一天24小时的计费钱数,注意单位是美分,还要乘以0.01。接下来给出n条记录,每条记录都包括客户名,时间,状态。“on-line”是开始打电话的时间…

专题四_位运算( >> , << , , | , ^ )_算法详细总结

目录 位运算 常见位运算总结 1.基础位运算 2.给一个数 n ,确定它的二进制表示中的第 x 位是 0 还是 1 3.运算符的优先级 4.将一个数 n 的二进制表示的第 x 位修改成 1 5.将一个数n的二进制表示的第x位修改成0 6.位图的思想 7.提取一个数(n)二进…

如何优雅地处理返回值

我们已经知道了如何优雅的校验传入的参数了,那么后端服务器如何实现把数据返回给前端呢? 返回格式 后端返回给前端我们一般用 JSON 体方式,定义如下: {#返回状态码code:string, #返回信息描述message:string,#返回值data…

算法设计与分析(线性时间选择算法

目录 线性时间选择算法(QuickSelect)实现注意事项有可能出现的特殊情况:小结: 线性时间选择算法(QuickSelect)实现 线性时间选择算法 是快速排序算法的一个变种,用于在未完全排序的数组中找到第…

Next-ViT: 下一代视觉Transformer,用于现实工业场景中的高效部署

摘要 由于复杂的注意力机制和模型设计,大多数现有的视觉Transformer(ViTs)在实际的工业部署场景中,如TensorRT和CoreML,无法像卷积神经网络(CNNs)那样高效运行。这提出了一个明显的挑战&#x…

[Redis] Redis中的set和zset类型

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

微信,手机文件管理,通过自己软件打开——手机平板电脑编程———未来之窗行业应用跨平台架构

一、手机平板IT人员编程编辑器 专为 IT 和运维人员设计的手机和平板编程编辑器,具有便携灵活、即时响应、适应多场景、触控便捷、资源丰富、成本较低、激发创意和数据同步方便等优点。 二、手机平板现状 目前手机和平板的现状是缺乏专门针对 IT 人员的编辑工具&a…

避免服务器安装多个mysql引起冲突的安装方法

最近工作中涉及到了数据迁移的工作. 需要升级mysql版本到8.4.2为了避免升级后服务出现异常, 因此需要保留原来的mysql,所以会出现一台服务器上运行两个mysql的情况 mysql并不陌生, 但是安装不当很容易引起服务配置文件的冲突,导致服务不可用, 今天就来介绍一种可以完美避免冲突…

COMDEL电源CX2500S RF13.56MHZ RF GENERATOR手侧

COMDEL电源CX2500S RF13.56MHZ RF GENERATOR手侧

【C++ Primer Plus习题】16.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include <list> using …

采用 Redis+数据库为某互联网文化公司建立网上社区平台

目录 案例 【说明】 【问题 1】(10 分) 【问题 2】(7 分) 【问题 3】(8 分) 【答案】 【问题 1】解析 【问题 3】解析 相关推荐 案例 阅读以下关于数据库缓存的叙述&#xff0c;回答问题 1 至问题 3。 【说明】 某互联网文化发展公司因业务发展&#xff0c;需要建立网…