返回顶部
首页 > 资讯 > 后端开发 > Python >XGBOOST算法Python实现(保姆级)
  • 532
分享到

XGBOOST算法Python实现(保姆级)

python开发语言人工智能机器学习 2023-08-31 12:08:13 532人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

摘要         XGBoost算法(eXtreme Gradient Boosting)在目前的Kaggle、数学建模和大数据应用等竞赛中非常流行。本文将会从XGBOOST算法原理、python实现、敏感性分析和实际应用进行详细说明。

摘要

        XGBoost算法(eXtreme Gradient Boosting)在目前的Kaggle、数学建模和大数据应用等竞赛中非常流行。本文将会从XGBOOST算法原理、python实现、敏感性分析和实际应用进行详细说明。

目录

0 绪论

一、材料准备

二、算法原理

三、算法Python实现

        3.1 数据加载

        3.2 将目标变量的定类数据分类编码

        3.3 将数据分为训练数据和测试数据

        3.4训练XGBOOST模型

        3.5 测试模型

        3.6 输出模型的预测混淆矩阵(结果矩阵)

        3.7 输出模型准确率

        3.8 绘制混淆矩阵图

         3.9 完整实现代码

        3.10 结果输出示例

四、 XGBOOST算法的敏感性分析和实际应用

        4.1 敏感性分析

        4.2 算法应用

五、结论

六、备注

0 绪论

        数据挖掘和数学建模等比赛中,除了算法的实现,还需要对数据进行较为合理的预处理,包括缺失值处理、异常值处理、定类数据特征编码和冗余特征的删除等等,本文默认读者的数据均已完成数据预处理,如有需要,后续会将数据预处理的方法也进行发布。

一、材料准备

        Python编译器:PyCharm社区版或个人版等

        训练数据集:此处使用2022年数维杯国际大学生数学建模竞赛C题的附件数据为例。

        数据处理:经过初步数据清洗和相关性分析等操作得到初步的特征,并利用决策树进行特征重要性分析,完成二次特征降维,得到'CDRSB_bl', 'PIB_bl', 'FBB_bl'三个自变量特征,DX_bl为分类特征。

二、算法原理

     XGBOOST算法基于决策树的集成方法,主要采用了Boosting的思想,是Gradient Boosting算法的扩展,并使用梯度提升技术来提高模型的准确性和泛化能力。

        首先将基分类器层层叠加,然后每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重,XGBOOST的目标函数为:

    (1)

        其中,为损失函数;为正则项,用于控制树的复杂度;为常数项,为新树的预测值,它是将树的个数的结果进行求和。

三、算法Python实现

3.1 数据加载

        此处导入本文所需数据,DataX为自变量数据,DataY为目标变量数据(DX_bl)。

import pandas as pdX = pd.DataFrame(pd.read_excel('DataX.xlsx')).values  # 输入特征y = pd.DataFrame(pd.read_excel('DataY.xlsx')).values  # 目标变量

 3.2 将目标变量的定类数据分类编码

此处仅用0-4来代替五类数据,因为此处仅做预测,并不涉及相关性分析等其他操作,所以普通的分类编码就可以。如果需要用来做相关性分析或其他计算型操作,建议使用独热编码(OneHot- Encoding)。

from sklearn.preprocessing import LabelEncoderle = LabelEncoder()y = le.fit_transfORM(y)label_mapping = {0: 'AD', 1: 'CN', 2: 'EMCI', 3: 'LMCI', 4: 'SMC'}#此处为了后续输出混淆矩阵时,用原始数据输出

 3.3 将数据分为训练数据和测试数据

        本文将原始样本数据通过随机洗牌,并将70%的样本数据作为训练数据,30%的样本数据作为测试数据。这是一个较为常见的拆分方法,读者可通过不同的拆分测试最佳准确率和F1-score。

from sklearn.model_selection import train_test_split# 将数据分为训练数据和测试数据X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, train_size=0.7, random_state=42)

 3.4训练XGBOOST模型

        基于70%的样本数据进行训练建模,python有XGBOOST算法的库,所以很方便就可以调用。

import xgboost as xgb# 训练XGBoost分类器model = xgb.XGBClassifier()model.fit(X_train, y_train)#xgb.plot_tree(model)

 3.5 测试模型

        利用另外的30%样本数据进行测试模型准确率、精确率、召回率和F1度量值。

# 使用测试数据预测类别y_pred = model.predict(X_test)

 3.6 输出模型的预测混淆矩阵(结果矩阵)

        此处输出混淆矩阵的方法和之前的随机森林、KNN算法都有点不同,因为随机森拉算法不需要将定类数据进行分类编码就可以直接调用随机森林算法模型。

from sklearn.metrics import confusion_matrix, classification_report, accuracy_scorecm = confusion_matrix(y_test, y_pred)# 输出混淆矩阵for i, true_label in enumerate(label_mapping.values()):    row = ''    for j, pred_label in enumerate(label_mapping.values()):        row += f'{cm[i, j]} ({pred_label})\t'    print(f'{row} | {true_label}')# 输出混淆矩阵print(classification_report(y_test, y_pred,target_names=['AD', 'CN', 'EMCI', 'LMCI', 'SMC']))  # 输出混淆矩阵

 3.7 输出模型准确率

#此处的导库在上一个代码段中已引入print("Accuracy:")print(accuracy_score(y_test, y_pred))

 3.8 绘制混淆矩阵图

        将混淆矩阵结果图绘制并输出,可以将这一结果图放在论文中,提升论文美感和信服度。

import matplotlib.pyplot as pltimport numpy as nplabel_names = ['AD', 'CN', 'EMCI', 'LMCI', 'SMC']cm = confusion_matrix(y_test, y_pred)# 绘制混淆矩阵图fig, ax = plt.subplots()im = ax.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)ax.figure.colorbar(im, ax=ax)ax.set(xticks=np.arange(cm.shape[1]),       yticks=np.arange(cm.shape[0]),       xticklabels=label_names, yticklabels=label_names,       title='Confusion matrix',       ylabel='True label',       xlabel='Predicted label')# 在矩阵图中显示数字标签thresh = cm.max() / 2.for i in range(cm.shape[0]):    for j in range(cm.shape[1]):        ax.text(j, i, format(cm[i, j], 'd'),                ha="center", va="center",                color="white" if cm[i, j] > thresh else "black")fig.tight_layout()#plt.show()plt.savefig('XGBoost_Conclusion.png', dpi=300)

        上面的代码首先计算混淆矩阵,然后使用 matplotlib 库中的 imshow 函数将混淆矩阵可视化,最后通过 text 函数在混淆矩阵上添加数字,并使用 show/savefig 函数显示图像,结果输出如图3.1所示。

图3.1 混淆矩阵结果图

  3.9 完整实现代码

# 导入需要的库from sklearn.preprocessing import LabelEncoderimport matplotlib.pyplot as pltimport pandas as pdimport xgboost as xgbfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import confusion_matrix, classification_report, accuracy_scoreimport numpy as nple = LabelEncoder()label_mapping = {0: 'AD', 1: 'CN', 2: 'EMCI', 3: 'LMCI', 4: 'SMC'}X = pd.DataFrame(pd.read_excel('DataX.xlsx')).values  # 输入特征y = pd.DataFrame(pd.read_excel('DataY.xlsx')).values  # 目标变量y = le.fit_transform(y)# 将数据分为训练数据和测试数据X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, train_size=0.7, random_state=42)# 训练XGBoost分类器model = xgb.XGBClassifier()model.fit(X_train, y_train)#xgb.plot_tree(model)# 使用测试数据预测类别y_pred = model.predict(X_test)cm = confusion_matrix(y_test, y_pred)# 输出混淆矩阵for i, true_label in enumerate(label_mapping.values()):    row = ''    for j, pred_label in enumerate(label_mapping.values()):        row += f'{cm[i, j]} ({pred_label})\t'    print(f'{row} | {true_label}')# 输出混淆矩阵print(classification_report(y_test, y_pred,target_names=['AD', 'CN', 'EMCI', 'LMCI', 'SMC']))  # 输出混淆矩阵print("Accuracy:")print(accuracy_score(y_test, y_pred))# label_names 是分类变量的取值名称列表label_names = ['AD', 'CN', 'EMCI', 'LMCI', 'SMC']cm = confusion_matrix(y_test, y_pred)# 绘制混淆矩阵图fig, ax = plt.subplots()im = ax.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)ax.figure.colorbar(im, ax=ax)ax.set(xticks=np.arange(cm.shape[1]),       yticks=np.arange(cm.shape[0]),       xticklabels=label_names, yticklabels=label_names,       title='Confusion matrix',       ylabel='True label',       xlabel='Predicted label')# 在矩阵图中显示数字标签thresh = cm.max() / 2.for i in range(cm.shape[0]):    for j in range(cm.shape[1]):        ax.text(j, i, format(cm[i, j], 'd'),                ha="center", va="center",                color="white" if cm[i, j] > thresh else "black")fig.tight_layout()#plt.show()plt.savefig('XGBoost_Conclusion.png', dpi=300)# 上面的代码首先计算混淆矩阵,然后使用 matplotlib 库中的 imshow 函数将混淆矩阵可视化,最后通过 text 函数在混淆矩阵上添加数字,并使用 show/savefig 函数显示图像。

 3.10 结果输出示例

       

 图3.2 结果输出示例

四、 XGBOOST算法的敏感性分析和实际应用

 4.1 敏感性分析

         敏感性分析也叫做稳定性分析,可以基于统计学思想,通过百次测试,记录其准确率、精确率、召回率和F1-Score的数据,统计其中位数、平均值、最大值和最小值等数据,从而进行对应的敏感性分析。结果表明符合原模型成立,则通过了敏感性分析。前面的随机森林算法和KNN算法也是如此。

 4.2 算法应用

         XGBOOST算法可应用于大数据分析、预测等方面,尤其是大数据竞赛(Kaggle、阿里天池等竞赛中)特别常用,也是本人目前认为最好用的一个算法。

五、结论

        本文基于XGBOOST算法,从数据预处理、算法原理、算法实现、敏感性分析和算法应用都做了具体的分析,可适用于大部分机器学习算法初学者。

六、备注

        本文为原创文章,禁止转载,违者必究。如需原始数据,可点赞+收藏,然后私聊作者或在评论区中留下你的邮箱,即可获得训练数据一份。

来源地址:https://blog.csdn.net/m0_61399808/article/details/129718219

--结束END--

本文标题: XGBOOST算法Python实现(保姆级)

本文链接: https://lsjlt.com/news/385569.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • XGBOOST算法Python实现(保姆级)
    摘要         XGBoost算法(eXtreme Gradient Boosting)在目前的Kaggle、数学建模和大数据应用等竞赛中非常流行。本文将会从XGBOOST算法原理、Python实现、敏感性分析和实际应用进行详细说明。...
    99+
    2023-08-31
    python 开发语言 人工智能 机器学习
  • 保姆级随机森林算法Python教学
    摘要         机器学习算法是数据挖掘、数据能力分析和数学建模必不可少的一部分,而随机森林算法和决策树算法是其中较为常用的两种算法,本文将会对随机森林算法的Python实现进行保姆级教学。 0 绪论         数据挖掘和数学建模...
    99+
    2023-09-27
    python 随机森林
  • Python 安装netCDF4,保姆级教学!
    安装这个包真烦啊,庆幸的是终于安排上了,顺手总结了一下,有相关问题的可以看看。 首先,直接用pip install  netCDF4-1.6.0-cp310-cp310-win_amd64.whl大概率是不行的,科学上网也基本上不行,如图所...
    99+
    2023-09-03
    python numpy 开发语言
  • Python lambda函数保姆级使用教程
    目录一、lambda函数的定义   二、lambda函数实例lambda函数和普通函数对比求一个一元二次方程和高阶函数filter配合使用和sorted...
    99+
    2024-04-02
  • Python Map函数保姆级使用教程
    目录一、map函数的定义二、map函数实例对数列中的每个元数求平方求两个数列中对应元素的和求数列中每个元素的长度把数列中每个英文元素转换成对应的大写将字符串转换成数值数列提取字典中的...
    99+
    2024-04-02
  • 用Python简单实现个贪吃蛇小游戏(保姆级教程)
    目录一、前言二、初识 curses2.1 简单使用2.2 整点花样2.2.1 新建一个子窗口2.2.2 上点颜色2.2.3 给点细节三、贪吃蛇3.1 设计3.2 蛇语者3.3&nbs...
    99+
    2024-04-02
  • Python where函数保姆级使用教程
    目录一、where函数的定义二、where函数实例找出数列中大于某个数的位置索引数列中大于5取‘m_5’否则取’lq_5&rs...
    99+
    2024-04-02
  • 一文速学-XGBoost模型算法原理以及实现+Python项目实战
    目录 前言 一、XGBoost模型概述 1.发展历史 2.算法改进之处 1.损失函数 2.分裂点选择来源地址:https://blog.csdn.net/master_hunter/article/details/129423185...
    99+
    2023-08-31
    算法 机器学习 数据挖掘 人工智能 深度学习
  • Ubuntu20.04安装MySQL5.7-实测3种方法(保姆级教程)
    最近生产系统系统需要使用MySQL5.7版本的数据库,而Ubuntu20.04默认是8.0的版本,折腾了一段时间后,测试了3中方法,在实际应用环境中测试成功,因此发布出来给大家参考。建议使用方案三方式部署,乐意折腾的可以试试方案二和方案一!...
    99+
    2023-08-31
    linux 服务器 运维 mysql ubuntu
  • Python clip与range函数保姆级使用教程
    目录一、range函数的定义二、range函数实例省略起始值start和步长step设置初始值终值和步长三、random.randint函数的定义四、random.randint函数...
    99+
    2024-04-02
  • 安装conda搭建python环境(保姆级教程)
    目录 一、Anaconda简介二、Anaconda安装2.1 Anaconda下载2.2 Anaconda安装2.3 配置环境变量 三、通过conda配置python环境3.1 创建并激活...
    99+
    2023-08-31
    python conda
  • 保姆级python教程写个贪吃蛇大冒险
    目录导语 ​正文总结导语 ​ 贪吃蛇,大家应该都玩过。当初第一次接触贪吃蛇的时候 ,还是我爸的数字手机,考试成绩比较好,就会得到一些小奖励,玩手机游戏肯定也...
    99+
    2024-04-02
  • 保姆级教程:用Python做游戏有多简单
    我520的公众号图片发了以后,有很多同学问我这个游戏是怎么做的,难不难。我就用两篇文章来介绍一下,如果使用Python做游戏。这个游戏是使用PyGame做的,贴图素材是从itch.io[1]找的。我之前也没有用过PyGame,这次属于是现学...
    99+
    2023-05-14
    游戏 Python
  • C#算法之实现阿姆斯特朗数
    阿姆斯特朗数 阿姆斯特朗数是一个数字,等于每个数字的幂乘以总位数。 例如,诸如0、1、153、370、371和407、1634、8208、9474的数字是阿姆斯特朗数。 例如: 37...
    99+
    2024-04-02
  • Vue中四种操作dom方法保姆级讲解
    目录前言一、通过ref拿到dom的引用适用场景示例代码二、通过父容器的ref遍历拿到dom引用适用场景示例代码三、通过子组件emit传递ref适用场景示例代码四、通过:ref将dom...
    99+
    2023-02-01
    Vue操作dom Vue操作dom方式 Vue操作dom方法
  • W3C高级算法挑战之python实现
    最近在学python,网上很难找到对应的算法题网站,专业算法网站大部分都是国外的,之前在w3cschool看到有三个级别的Javascript脚本算法挑战,尝试用python实现,代码量相对比较少,如果你有更好的解法,还请不吝赐教,初学...
    99+
    2023-01-30
    算法 高级 W3C
  • 使用Python怎么实现一个阿姆斯特朗数算法
    这篇文章将为大家详细讲解有关使用Python怎么实现一个阿姆斯特朗数算法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、什么是阿姆斯特朗数?如果一个正整数等于其各个数字的立方和,则称该数为...
    99+
    2023-06-08
  • Python——PyQt5在PyCharm的配置与应用(保姆级教程)
    目录 一、安装pycharm与python版本 二、升级pip与换源,安装PyQt5、PyQt5-tool 三、添加环境变量 四、在pycharm的外部工具里添加3个工具 4.1、添加三个插件(重点) 五、如何使用QtDesigner  六...
    99+
    2023-09-05
    python qt pycharm
  • Python 多线程并发下载图片 保姆级教程
    有时候,下载大量图像需要几个小时——让我们来解决这个问题我明白了——你已经厌倦了等待你的程序下载图像。有时我必须下载数千张图像需要几个小时,而且你不可能一直等待你的程序完成下载这些愚蠢的图像。你有很多重要的事情要做。让我们构建一个简单的图像...
    99+
    2023-05-17
    多线程并发 下载图片 高效
  • 保姆级教你用Python制作超级玛丽游戏(文末赠书)
    名字:阿玥的小东东 学习:Python、C/C++ 主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主 目录 贪吃蛇游戏 弹珠游戏 超级玛丽(爷青回~)来源地址:htt...
    99+
    2023-09-22
    pygame python 游戏
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作