位置: IT常识 - 正文

XGBOOST算法Python实现(保姆级)(XGboost算法预测股价模型)

编辑:rootadmin
XGBOOST算法Python实现(保姆级)

推荐整理分享XGBOOST算法Python实现(保姆级)(XGboost算法预测股价模型),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:XGboost算法原理图,XGboost算法预测股价模型,XGboost算法模型,python bagging算法,XGboost算法预测股价模型,XGboost算法模型医学,XGboost算法流程图,XGboost算法预测股价模型,内容如对您有帮助,希望把文章链接给更多的朋友!

摘要

        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 将目标变量的定类数据分类编码XGBOOST算法Python实现(保姆级)(XGboost算法预测股价模型)

此处仅用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://www.jiuchutong.com/zhishi/298841.html 转载请保留说明!

上一篇:人脸检测5种方法(人脸检测5种方式)

下一篇:教你如何用CSS修改图片颜色(css样式修改)

  • 快手设置在哪里找(快手设置在哪里设置横竖屏)

    快手设置在哪里找(快手设置在哪里设置横竖屏)

  • 荣耀play4pro屏幕刷新率是90HZ吗(荣耀play4PRO屏幕厂商怎么查)

    荣耀play4pro屏幕刷新率是90HZ吗(荣耀play4PRO屏幕厂商怎么查)

  • 苹果11和11pro什么区别(iphone 11和11pro区别)

    苹果11和11pro什么区别(iphone 11和11pro区别)

  • 淘宝揽件超时有惩罚吗(淘宝揽收超时会对卖家什么影响)

    淘宝揽件超时有惩罚吗(淘宝揽收超时会对卖家什么影响)

  • 小爱音箱恢复出厂设置(小爱音箱恢复出厂后怎么连接上)

    小爱音箱恢复出厂设置(小爱音箱恢复出厂后怎么连接上)

  • 电脑菜单栏变成竖的了(电脑菜单栏变成竖的了怎么调回来)

    电脑菜单栏变成竖的了(电脑菜单栏变成竖的了怎么调回来)

  • 华为art一al00x是什么手机

    华为art一al00x是什么手机

  • 快手id怎么改第二次(快手如何更改id号)

    快手id怎么改第二次(快手如何更改id号)

  • 照片删除两三年能恢复吗(删除很久的照片)

    照片删除两三年能恢复吗(删除很久的照片)

  • 苹果x点阵坏了能修吗(苹果x点阵坏了有什么区别)

    苹果x点阵坏了能修吗(苹果x点阵坏了有什么区别)

  • 扫描仪一般不使用哪个接口(扫描仪一般不使用的原因)

    扫描仪一般不使用哪个接口(扫描仪一般不使用的原因)

  • 朋友圈怎么发一分钟视频(朋友圈怎么发一条显示多条)

    朋友圈怎么发一分钟视频(朋友圈怎么发一条显示多条)

  • 4mm和6mm摄像头区别(摄像头4mm跟6mm区别)

    4mm和6mm摄像头区别(摄像头4mm跟6mm区别)

  • 美版xsmax怎么用双卡(美版xsmax解锁教程)

    美版xsmax怎么用双卡(美版xsmax解锁教程)

  • 酷睿m36y30相当于什么(酷睿m3 6y30对比i5 4300)

    酷睿m36y30相当于什么(酷睿m3 6y30对比i5 4300)

  • ios10什么时候发布的(ios10发布时间)

    ios10什么时候发布的(ios10发布时间)

  • 主机里的风扇叫什么(主机里的风扇叫什么名字)

    主机里的风扇叫什么(主机里的风扇叫什么名字)

  • 华为数据线叫什么(华为数据线叫什么头)

    华为数据线叫什么(华为数据线叫什么头)

  • 怎么样制作ppt文稿(怎样制作ppt文稿)

    怎么样制作ppt文稿(怎样制作ppt文稿)

  • 忘记wifi管理员密码怎么办(忘记wifi管理员登陆密码)

    忘记wifi管理员密码怎么办(忘记wifi管理员登陆密码)

  • 发微信语音对方忙线中(发微信语音对方无应答是怎么回事)

    发微信语音对方忙线中(发微信语音对方无应答是怎么回事)

  • 苹果xs没有电池百分比吗(iphone xs没有显示电池百分比)

    苹果xs没有电池百分比吗(iphone xs没有显示电池百分比)

  • 全民k歌人声和伴奏怎么调(全民k歌人声和伴奏最佳比例)

    全民k歌人声和伴奏怎么调(全民k歌人声和伴奏最佳比例)

  • vivo手机断流怎么解决(vivox23断流)

    vivo手机断流怎么解决(vivox23断流)

  • 8p3d touch怎么设置(苹果8p怎么设置3d touch)

    8p3d touch怎么设置(苹果8p怎么设置3d touch)

  • 手机屏幕抖动是什么原因(手机屏幕抖动是怎么回事儿)

    手机屏幕抖动是什么原因(手机屏幕抖动是怎么回事儿)

  • MacOS桌面文件怎么刷新? Mac刷新桌面文件的技巧(mac桌面的文件夹怎么换到别的地方)

    MacOS桌面文件怎么刷新? Mac刷新桌面文件的技巧(mac桌面的文件夹怎么换到别的地方)

  • 最强的笔记本是什么(最强笔记本2021)

    最强的笔记本是什么(最强笔记本2021)

  • 车辆保险费发票的会计分录
  • 什么是纳税义务人,在理解这一观念时应注意哪些问题
  • 购买税控盘分录怎么做
  • 兼职人员的工资怎么算
  • 累计折旧影响所得税费用吗
  • 税控盘费用抵扣
  • 企业收到的投资者的超出其在企业
  • 外商投资企业提取储备基金
  • 小微企业享受减免税政策
  • 合同一方按手印另一方没按有效吗
  • 税收抵免与税收的区别
  • 抵缴以前年度多缴所得税如何做会计分录?
  • 车改补贴是否计入工资总额
  • 租赁房产不开租房发票
  • 年度账套怎么结转下一年
  • 汇算清缴补交所得税的账务处理小企业会计准则
  • 新契税法还有优惠吗?
  • 进口增值税 海关
  • 银行抵押贷款结清后需要解押吗
  • 土地交易服务费分录
  • 发票冲红可以冲红数量不变金额减少
  • 汇算清缴时
  • 暂时性差异的转回期间如何确定
  • 研发销售型软件有哪些
  • 行政事业单位公车使用制度
  • 没有组策略权限
  • 事业单位接受捐赠固定资产入账
  • echarts3d地图
  • ChatGPT-4 终于来了(文末附免费体验地址)
  • 如何计算业务招标价格
  • 赔偿款财务如何做账
  • 应收账款转让的限制约定
  • php框架symfony
  • 资产负债表利润表的勾稽关系
  • 怎么用ai做vi
  • 激活函数总结
  • 费用化支出期末一般转入哪个账户?
  • 电汇跟支票的区别
  • 生活办公用品清单
  • 交易性金融资产公允价值变动计入
  • MySQL中distinct与group by之间的性能进行比较
  • 电子承兑逾期超过30天怎么办
  • 支付给个人的佣金没有发票
  • 房产税的纳税义务人
  • 修理费账务处理
  • 专项资金支出流程
  • mysql子查询关键字
  • 企业所得税入账凭证
  • 两个公司发工资公司会发现吗
  • 固定资产清理的累计折旧怎么算
  • 盈余公积分配现金股利会影响留存收益吗
  • 水利工程施工税率是多少
  • 公户转私户的钱怎么退回来
  • 域名费计入哪个科目
  • 员工垫付的费用怎样记账
  • 期间费用率怎么算
  • mysql如何解压
  • 深度技术win11
  • ubuntu系统怎么用
  • 怎么在windows
  • linux 系统查看
  • 利用windows资源管理
  • linux操作系统b
  • win10系统中怎么打开IE浏览器
  • windows修复失败
  • opengl自学
  • nodejs函数返回值
  • 激情台球游戏源码大全
  • python中判断
  • apktool破解应用内购
  • xp系统explorer停止工作
  • python输出unicode编码
  • python守护线程与非守护线程
  • mapper--图片热点区域高亮组件官方站点
  • Windows下Eclipse+PyDev配置Python+PyQt4开发环境
  • 个人所得税每年都可以退税吗
  • 股权转让查账重点查什么
  • 国税车购税征收标准
  • 退契税的时间是什么时候
  • 残疾人个体工商户补贴
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设