时序预测 | 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.hqwc.cn/news/92493.html

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

相关文章

【Java集合学习1】ArrayList集合学习及集合概述分析

JavaArrayList集合学习及集合学习概述 一、Java集合概述 Java 集合&#xff0c; 也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection接口&#xff0c;主要用于存放单一元素&#xff1b;另一个是 Map 接口&#xff0c;主要用于存放键值对。对于Col…

大数据Flink(七十):SQL 动态表 连续查询

文章目录 SQL 动态表 & 连续查询 一、​​​​​​​SQL 应用于流处理的思路

【跟小嘉学 Rust 编程】二十、进阶扩展

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…

Cell | 超深度宏基因组!复原消失的肠道微生物

期刊&#xff1a;Cell IF&#xff1a;64.5 (Q1) 发表时间&#xff1a;2023.6 研究背景 不同的生活方式会影响微生物组组成&#xff0c;但目前微生物组的研究严重偏向于西方工业化人群&#xff0c;其中工业化人群的特点是微生物群多样性较低。为了理解工…

Apollo领航官送福利啦

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f388;✨百度apollo介绍 全球智能驾驶产业领跑者 起源 百度…

视频融合平台EasyCVR视频汇聚平台关于小区高空坠物安全实施应用方案设计

近年来&#xff0c;随着我国城市化建设的推进&#xff0c;高楼大厦越来越多&#xff0c;高空坠物导致的伤害也屡见不鲜&#xff0c;严重的影响到人们的生命安全。像在日常生活中一些不起眼的小东西如烟头、鸡蛋、果核、易拉罐&#xff0c;看似伤害不大&#xff0c;但只要降落的…

用Kubernetes(k8s)的ingress部署https应用

用Kubernetes的ingress部署https应用 环境准备Ingress安装域名证书准备 部署应用通过ingress暴露应用根据ssl证书生成对应的secret创建ingress暴露部署的应用确认自己安装了ingress创建ingress 访问你暴露的应用 环境准备 Ingress安装 我之前有一片文章写的是用ingress暴露应…

iOS逆向:越狱及相关概念的介绍

在上一篇内容中我们介绍了App脱壳的技术&#xff0c;今天我们来介绍一个和iOS逆向密切相关的知识&#xff1a;越狱。 iOS操作系统的封闭性一直是开发者们关注的焦点之一。为了突破Apple的限制&#xff0c;越狱技术应运而生。本文将深入探讨iOS越狱&#xff0c;包括可越狱的版本…

ActiveMQ配置初探

文章目录 配置wrapper相关配置wrapper是干什么用的MQ的运行内存修改【需修改】修改内容题外话 wrapper.log配置【需修改】引起的问题优化方式 activemq.xml相关配置官网介绍配置管理后台的认证授权【建议修改】配置broker【根据自己需求更改】配置允许jmx监控关闭消息通知持久化…

Ubuntu 下安装Qt5.12.12无法输入中文解决方法

Ubuntu 下安装Qt5.12.12无法输入中文解决方法 一&#xff0c;环境&#xff1a; &#xff08;1&#xff09;VMware Workstation 15 Pro &#xff08;2&#xff09;Ubuntu 20.04 &#xff08;3&#xff09;Qt 5.12.12 64bits &#xff08;4&#xff09;Qt Creator 5.0.2 &#…

小型双轮差速底盘机器人实现无线遥控功能

1. 功能说明 本文示例实现的功能为&#xff1a;利用 探索者Birdmen手柄扩展板和 探索者NRF无线通信模块 遥控R023样机小型双轮差速底盘做出前进、后退以及转向的动作。 2. 电子硬件 在这个示例中&#xff0c;我们采用了以下硬件&#xff0c;请大家参考&#xff1a; 主控板 Ba…

unity 发布apk,在应用内下载安装apk(用于更大大版本)

*注意事项&#xff1a; 1&#xff0c;andriod 7.0 和 android 8.0是安卓系统的分水岭&#xff0c;需要分开来去实现相关内容2&#xff0c;注意自己的包名&#xff0c;在设置一些共享文件的时候需要放自己的包名3,以下是直接用arr包放入unity中直接使用的&#xff0c;不需要导入…