时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)

时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)

目录

    • 时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)
      • 预测效果
      • 基本介绍
      • 程序设计
      • 参考资料

预测效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

基本介绍

Matlab实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测
TSO-XGBoost,金枪鱼算法优化,XGBoost,时间序列预测。
1.data为数据集,单变量时间序列数据集,优化参数(最大迭代次数,深度,学习率),
2.MainTSO_XGboostTS.m为主程序文件,其他为函数文件,无需运行。
3.命令窗口输出R2、MAE、MAE和RMSEP等评价指标,可在下载区获取数据和程序内容。
注意程序和数据放在一个文件夹,文件夹不可以XGBoost命名,因为有函数已经用过,运行环境为Matlab2018及以上。

  • xgboost是属于boosting家族,在目标函数中使用了二阶泰勒展开并加入了正则,在决策树的生成过程中采用了精确贪心的思路,寻找最佳分裂点的时候,使用了预排序算法,对所有特征都按照特征的数值进行预排序,然后遍历所有特征上的所有分裂点位,计算按照这些候选分裂点位分裂后的全部样本的目标函数增益,找到最大的那个增益对应的特征和候选分裂点位,从而进行分裂。
  • 这样一层一层的完成建树过程, xgboost训练的时候,是通过加法的方式进行训练,也就是每一次通过聚焦残差训练一棵树出来,最后的预测结果是所有树的加和表示。

程序设计

  • 完整源码和数据下载地址:MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行%%  优化算法
[Best_pos, Best_score, curve, avcurve] = TSO(pop, Max_iteration, lb, ub, dim, fun);%%  获取最优参数
num_trees = Best_pos(1, 1);         % 迭代次数
%params.max_depth = Best_pos(1, 2);  % 树的深度
params.max_depth = 18;  % 树的深度
params.eta = Best_pos(1, 3);        % 学习率%%  建立模型
model = xgboost_train(p_train, t_train, params, num_trees);%%  预测
t_sim1 = xgboost_test(p_train, model);
t_sim2 = xgboost_test(p_test , model);%%  数据反归一化
T_sim1 = mapminmax('reverse', t_sim1', ps_output);
T_sim2 = mapminmax('reverse', t_sim2', ps_output);%% V. 评价指标
%%  均方根误差 RMSE
error1 = sqrt(sum((T_sim1 - T_train).^2)./M);
error2 = sqrt(sum((T_test - T_sim2).^2)./N);%% 决定系数
R1 = rsquare(T_train,T_sim1);
R2 = rsquare(T_test,T_sim2);MAE1 = mean(abs(T_train - T_sim1));
MAE2 = mean(abs(T_test - T_sim2));
%% 平均绝对百分比误差MAPE
MAPE1 = mean(abs((T_train - T_sim1)./T_train));
MAPE2 = mean(abs((T_test - T_sim2)./T_test));
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
%%  适应度曲线
figure
plot(1 : length(curve), curve, 'LineWidth', 1.5);
title('TSO适应度变化曲线', 'FontSize', 13);
xlabel('迭代次数', 'FontSize', 10);
ylabel('适应度值', 'FontSize', 10);
grid onaa=0.7;
z=0.05;
while Iter<Max_iterC=Iter/Max_iter;a1=aa+(1-aa)*C;a2=(1-aa)-(1-aa)*C;for i=1:size(T,1)Flag4ub=T(i,:)>ub;Flag4lb=T(i,:)<lb;T(i,:)=(T(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;fitness(i)=fobj(T(i,:));if fitness(i)<Best_scoreBest_score=fitness(i);  Best_pos=T(i,:);endendC_old=T;  fit_old=fitness;%-------------------------------------------------t=(1-Iter/Max_iter)^(Iter/Max_iter);if rand<zT(1,:)= (ub-lb)*rand+lb;elseif  0.5<randr1=rand;Beta=exp(r1*exp(3*cos(pi*((Max_iter-Iter+1)/Max_iter))))*(cos(2*pi*r1));if  C>randT(1,:)=a1.*(Best_pos+Beta*abs(Best_pos-T(1,:)))+a2.*T(1,:); %Equation (8.3)elseIndivRand=rand(1,dim).*(ub-lb)+lb;T(1,:)=a1.*(IndivRand+Beta*abs(IndivRand-T(1,:)=Best_pos+rand(1,dim).*(Best_pos-T(1,:))+TF.*t^2.*(Best_pos-T(1,:));%Equation (9.1)elseT(1,:) =TF.* t^2.*T(1,:);%Equation (9.2)endendendfor i=2:popif rand<zT(i,:)= (ub-lb)*rand+lb;elseif  0.5<randr1=rand;T(i,:)=a1.*(Best_pos+Beta*abs(Best_pos-T(i,:)))+a2.*T(i-1,:);%Equation (8.4)elseIndivRand=rand(1,dim).*(ub-lb)+lb;T(i,:)=a1.*(IndivRand+Beta*abs(IndivRand-T(i,:)))+a2.*T(i-1,:);%Equation (8.2)endelseTF = (rand>0.5)*2-1;if 0.5>randT(i,:)=Best_pos+rand(1,dim).*(Best_pos-T(i,:))+TF*t^2.*(Best_pos-T(i,:)); %Equation (9.1)elseT(i,:) = TF*t^2.*T(i,:);%Equation (9.2)endendendendIter=Iter+1;curve(Iter)=Best_score;%curve(Iter) = GBestF;avcurve(Iter) = sum(curve) / length(curve);disp(['第' num2str(Iter) '次迭代适应度值:' num2str(Best_score)])
end

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/124693040?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/124864369?spm=1001.2014.3001.5502

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

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

相关文章

大数据项目实战(安装Hive)

一&#xff0c;搭建大数据集群环境 1.3 安装Hive 1.3.1 Hive的安装 1.安装MySQL服务 1&#xff09;检查是否安装MySQL&#xff0c;如安装将其卸载。卸载命令 rpm -qa | grep mysql 2&#xff09;搜索MySQL文件夹&#xff0c;如存在则删除 find / -name mysql rm -rf /etc/s…

Ceph入门到精通-如何编译安装Quagga?

Quagga 1. 理论部分 1.1 软件简介 Quagga中文翻译斑驴&#xff0c;是一种先进的路由软件包&#xff0c;提供一套基于TCP/IP的路由协议。 1.2 斑驴的应用场景 – 使得操作系统变成专业的路由 – 使得操作系统具有与传统路由通过路由协议直接对接 1.3 斑驴支持的路由协议 …

2分钟搭建自己的GPT网站

如果觉得官方免费的gpt&#xff08;3.5&#xff09;体验比较差&#xff0c;总是断开&#xff0c;或者不会fanqiang&#xff0c;那你可以自己搭建一个。但前提是你得有gpt apikey。年初注册的还有18美金的额度&#xff0c;4.1号后注册的就没有额度了。不过也可以自己充值。 有了…

五度易链最新“产业大数据服务解决方案”亮相,打造数据引擎,构建智慧产业

快来五度易链官网 点击网址【http://www.wdsk.net/】 看看我们都发布了哪些新功能!!! 自2015年布局产业大数据服务行业以来&#xff0c;“五度易链”作为全国产业大数据服务行业先锋企业&#xff0c;以“让数据引领决策&#xff0c;以智慧驾驭未来”为愿景&#xff0c;肩负“打…

Nginx全局配置

目录 一、修改启动进程数 二、日制分割 三、nginx进程的优先级&#xff08;work进程的优先级&#xff09; 四、http设置 4.1http 协议配置说明 4.2mime 4.3 server块构建虚拟主机 4.4 location 一、修改启动进程数 worker_processes 1; #允许的启动工作进程数数量…

webrtc的Sdp中的Plan-b和UnifiedPlan

在一些类似于视频会议场景下&#xff0c;媒体会话参与者需要接收或者发送多个流&#xff0c;例如一个源端&#xff0c;同时发送多个左右音轨的音频&#xff0c;或者多个摄像头的视频流&#xff1b;在2013年&#xff0c;提出了2个不同的SDP IETF草案Plan B和Unified Plan&#x…

【C++初阶】list的常见使用操作

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

Jumpserver堡垒机管理(安装和相关操作)-------从小白到大神之路之学习运维第89天

第四阶段 时 间&#xff1a;2023年8月28日 参加人&#xff1a;全班人员 内 容&#xff1a; Jumpserver堡垒机管理 目录 一、堡垒机简介 &#xff08;一&#xff09;运维常见背黑锅场景 &#xff08;二&#xff09;背黑锅的主要原因 &#xff08;三&#xff09;解决背黑…

Unity shader 入门之渲染管线一、总览

如下示意图 应用阶段(ApplicationStage)&#xff1a;准备场景信息&#xff08;视景体&#xff0c;摄像机参数&#xff09;、粗粒度剔除、定义每个模型的渲染命令&#xff08;材质&#xff0c;shader&#xff09;——由开发者定义&#xff0c;不做讨论。几何阶段(GemetryStage)&…

centos服务器系统下安装python3并与自带的python2

centos服务器系统下安装python3并与自带的python2 在centos中&#xff0c;自带有python2&#xff0c;因此需要经常安装python3。但是这里有一个坑&#xff0c;就是centos的yum是用python2写的&#xff0c;如果正常编译安装python3&#xff0c;那么yum就会直接挂了。为了方便以…

PDF校对:让您的文件无瑕疵

无论您是企业家、学生、教育者还是作家&#xff0c;我们都知道&#xff0c;提交或发布一个充满错误的PDF文件可能会给您的声誉或品牌带来严重损害。这就是为什么PDF校对如此关键的原因。现在&#xff0c;让我们深入了解PDF校对的重要性&#xff0c;以及如何确保您的文件尽可能完…

[NLP]LLM--transformer模型的参数量

1. 前言 最近&#xff0c;OpenAI推出的ChatGPT展现出了卓越的性能&#xff0c;引发了大规模语言模型(Large Language Model, LLM)的研究热潮。大规模语言模型的“大”体现在两个方面&#xff1a;模型参数规模大&#xff0c;训练数据规模大。以GPT3为例&#xff0c;GPT3的参数量…

MDK 5.xx.0 + STM32F10x 笔记

天才脑袋比不上烂笔头, 写给自己看, 自用资料。 安装MDK STM32环境 Download MDK安装 MDK -> c:\keil_v5 用默认路径下载 ARMCC V5.06 Update 7 (build960) <- 长期稳定支持版本安装至 c:\keil_v5\arm\ARMCC开启 uVision.设定 预设编译程序版本 : V5.06 Update 7 (bui…

git分支管理策略

git的基础操作以及常用命令在上篇博客哦~ git原理与基本使用 1.分支管理 1.主分支 在版本回退⾥&#xff0c;我们已经知道&#xff0c;每次提交&#xff0c;Git都把它们串成⼀条时间线&#xff0c;这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前&#xff0c;只有⼀条时间线&…

python的安装(推荐)

torch安装与卸载推荐链接1推荐链接2 推荐链接3 安装pytorch步骤推荐链接 python关键字&#xff1a;

【CSS 画个梯形】

使用clip-path: polygon画梯形 clip-path: polygon使用方式如下&#xff1a; 效果实现 clip-path: polygon 是CSS的属性之一&#xff0c;用于裁剪元素的形状。它可以通过定义一个具有多边形顶点坐标的值来创建一个多边形的裁剪区域&#xff0c;从而实现元素的非矩形裁剪效果。…

软件测试用例经典方法 | 因果图法及案例

典型的黑盒测试用例设计方法包括等价类划分法、边界值分析法、决策表法、因果图法等。 如果程序的输入条件之间相互存在联系,那么就会使情况变得复杂,因为要检查输入条件的组合情况并不是一件容易的事情,即使把所有输入条件划分为等价类,它们之间的组合情况也相当多,难以分析。…

pdf怎么压缩到1m以内?分享3个pdf压缩技巧

PDF是我们常用的文件类型&#xff0c;它旨在保留文档原样式和格式&#xff0c;因此通常情况下要比其他文件格式大一些&#xff0c;特别是那些包含了大量图片的PDF文件&#xff0c;文件大小都比较大&#xff0c;给我们的存储和传输带来了困难。 针对过大的PDF文件&#xff0c;想…

伦敦金走势多变怎么办

投资知识比较丰富的朋友&#xff0c;应该知道一个品种的价格过于波动&#xff0c;对投资者来说并是一件不友好的事情&#xff0c;因为频繁的价格变化&#xff0c;对于收益的稳定性会产生负面的影响&#xff0c;也可能让投资者的持仓陷入进退维谷的尴尬境地。 黄金作为贵金属市场…

软考:中级软件设计师:HTML

软考&#xff1a;中级软件设计师:HTML 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#xff…