您的位置:首页 > 教育 > 培训 > 数据清洗-缺失值填充-XGboost算法填充

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

2024/11/4 0:41:10 来源:https://blog.csdn.net/qq_63913621/article/details/142281106  浏览:    关键词:数据清洗-缺失值填充-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缺点

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com