多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测

news2025/1/4 19:52:42

多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测

目录

    • 多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测
      • 预测效果
      • 基本介绍
      • 模型描述
      • 程序设计
      • 参考资料

预测效果

3
4
5
6

基本介绍

1.多维时序 | MATLAB实现PSO-CNN-BiGRU多变量时间序列预测;
2.运行环境为Matlab2020b;
3.基于粒子群优化算法(PSO)、卷积神经网络(CNN)和双向门控循环单元网络(BiGRU)的超前24步多变量时间序列回归预测算法;
4.多变量特征输入,单序列变量输出,输入前一天的特征,实现后一天的预测,超前24步预测;
5.通过粒子群优化算法优化学习率、卷积核大小、神经元个数,这3个关键参数,以最小MAPE为目标函数。
6.提供MAPE、RMSE、MAE等计算结果展示。
7.适用领域:
风速预测、光伏功率预测、发电功率预测、碳价预测等多种应用。
使用便捷:
直接使用EXCEL表格导入数据,无需大幅修改程序。内部有详细注释,易于理解。

模型描述

卷积双向门控循环单元是一种深度学习模型,常用于序列数据的处理,其中包括语音识别、自然语言处理、股票预测等。 模型可以同时处理时间序列数据的正向和反向信息,利用门控机制来控制信息的流动,从而提高模型的准确性。在模型中,一个输入数据序列会经过一个卷积层,然后再传入一个双向门控循环单元中。 模型中的门控机制可以控制信息的流动,从而减少梯度消失问题。最终, 模型可以将多个输入序列映射到一个输出序列,用于回归预测。在进行回归预测时,CBGRU 模型需要在最后加上一个全连接层,将 BGRU 输出的结果映射到预测目标的值域上。训练时,可以使用损失函数来计算预测结果与真实结果之间的误差,并使用反向传播算法更新模型的参数。

程序设计

  • 完整源码和数据获取方式:私信博主回复MATLAB实现PSO-CNN-BiGRU多变量时间序列预测
lgraph = connectLayers(lgraph, "seqfold/out", "conv_1");             % 折叠层输出 连接 卷积层输入
lgraph = connectLayers(lgraph, "seqfold/miniBatchSize", "sequnfold/miniBatchSize"); 
                                                                     % 折叠层输出连接反折叠层输入
lgraph = connectLayers(lgraph, "relu_2", "sequnfold/in");            % 激活层输出 连接 反折叠层输入
lgraph = connectLayers(lgraph, "sequnfold", "flip");
lgraph = connectLayers(lgraph, "bigru2", "cat/in2");

%% 参数设置
options = trainingOptions('adam', ...     % Adam 梯度下降算法
    'MaxEpochs', 100,...                  % 最大训练次数
    'MiniBatchSize',64,...                % 批处理
    'InitialLearnRate', 0.001,...         % 初始学习率为0.001
    'L2Regularization', 0.001,...         % L2正则化参数
    'LearnRateSchedule', 'piecewise',...  % 学习率下降
    'LearnRateDropFactor', 0.1,...        % 学习率下降因子 0.1
    'LearnRateDropPeriod', 400,...        % 经过800次训练后 学习率为 0.001*0.1
    'Shuffle', 'every-epoch',...          % 每次训练打乱数据集
    'ValidationPatience', Inf,...         % 关闭验证
    'Plots', 'training-progress',...      % 画出曲线
    'Verbose', false);

%%  训练模型
[net,traininfo] = trainNetwork(p_train, t_train, lgraph, options);

%% 预测
t_sim1 = predict(net, p_train); 
t_sim2 = predict(net, p_test ); 

%%  数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);

%%  均方根误差
error1 = sqrt(sum((T_sim1' - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2' - T_test ).^2) ./ N);


%%  相关指标计算
%  R2
R1 = 1 - norm(T_train - T_sim1')^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test  - T_sim2')^2 / norm(T_test  - mean(T_test ))^2;

disp(['训练集数据的R2为:', num2str(R1)])
disp(['测试集数据的R2为:', num2str(R2)])

%  MAE
mae1 = sum(abs(T_sim1' - T_train)) ./ M ;
mae2 = sum(abs(T_sim2' - T_test )) ./ N ;

disp(['训练集数据的MAE为:', num2str(mae1)])
disp(['测试集数据的MAE为:', num2str(mae2)])

%% 平均绝对百分比误差MAPE
MAPE1 = mean(abs((T_train - T_sim1')./T_train));
MAPE2 = mean(abs((T_test - T_sim2')./T_test));

disp(['训练集数据的MAPE为:', num2str(MAPE1)])
disp(['测试集数据的MAPE为:', num2str(MAPE2)])

%  MBE
mbe1 = sum(abs(T_sim1' - T_train)) ./ M ;
mbe2 = sum(abs(T_sim1' - T_train)) ./ N ;

disp(['训练集数据的MBE为:', num2str(mbe1)])
disp(['测试集数据的MBE为:', num2str(mbe2)])

%均方误差 MSE
mse1 = sum((T_sim1' - T_train).^2)./M;
mse2 = sum((T_sim2' - T_test).^2)./N;

disp(['训练集数据的MSE为:', num2str(mse1)])
disp(['测试集数据的MSE为:', num2str(mse2)])

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/128577926?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128573597?spm=1001.2014.3001.5501

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kafka 入门到起飞 - 举个栗子一步一步说HW、LEO如何写入

举个简单栗子,如上图 replication.factory 2 副本因子是2一个Leader副本,一个Follower副本初始情况Leader和Follower 副本都是空我们逐步看当producer写入消息时,broker端的副本会做什么,副本的HW和LEO是如何被更新的 步骤一&a…

网上考试系统将会成为提升教育质量的利器

随着信息技术的飞速发展,网上考试系统成为了现代教育的一项重要工具。这种基于网络的考试方式不仅为学校和机构提供了高效管理和评估学生的能力,同时也带来了许多便利和创新。 网上考试系统为学校和机构提供了更高效的管理方式。传统的纸笔考试需要大量…

计算机中丢失MSVCR120.dll,找不到MSVCR120.dll是什么意思?

当计算机中缺少MSVCR120.dll文件时,意味着缺少了Microsoft Visual C Redistributable文件的一个组件。MSVCR120.dll是Visual C Redistributable 2013的动态链接库文件,它是应用程序依赖的重要文件之一。缺少MSVCR120.dll文件可能会导致一些应用程序无法正…

极客时间-《左耳听风》

技术基础 02 程序员如何用技术变现(下) 在学习技术的过程一定要多问自己两个问题:“一,这个技术解决什么问题?为什么别的同类技术做不到?二,为什么是这样解决的?有没有更好的方式&…

【报错】git push --set-upstream origin XXXX重名

您在尝试将分支推送到远程仓库时遇到了错误。错误信息表明,由于已经存在名为 refs/heads/xingfan/demo 的文件夹,Git 无法创建分支 refs/heads/xingfan。 要解决此问题,您可以尝试重命名本地分支,然后将其推送到远程仓库。以下是…

冠达管理:被举牌的股票好不好?

所谓“举牌”,就是指通过买入目标公司5%以上的股份并自动公告,向商场宣示自己对公司股权的控制权和出资意向。那么,对于这些被举牌的公司,其股票好不好呢? 1. 举牌背面的原因 首先,咱们需求关注举牌背面的…

图数据库_Neo4j和SpringBoot整合使用_创建节点_删除节点_创建关系_使用CQL操作图谱---Neo4j图数据库工作笔记0009

首先需要引入依赖 springboot提供了一个spring data neo4j来操作 neo4j 可以看到它的架构 这个是下载下来的jar包来看看 有很多cypher对吧 可以看到就是通过封装的驱动来操作graph database 然后开始弄一下 首先添加依赖

RunnerGo链接数据库功能详解

我们在做性能测试或者场景测试时往往需要从数据库中获取一些真实的系统数据让我们配置的场景更加贴合实际。而RunnerGo也是在最近的大版本更新中推出连接数据库功能,本篇文章也给大家讲解一下具体的操作方法和实际应用场景。 配置数据库 首先进入RunnerGo页面&…

​怎么将物理机硬盘克隆到虚拟机?

​用户案例:克隆后的硬盘是否能用于虚拟机? “我有一台安装了Windows10的计算机,现在正在尝试克隆电脑上的硬盘。然后我想把这个硬盘放在自己的虚拟机中使用,这样我就可以从克隆的硬盘中启动相同的Windows10系统。” …

做好以下几点,可以让我们延长周末体验感,好好放松!!!

工作以后常常容易感到疲于奔命,让我们找到适合自己方式,来让我们度过一个充实放松的周末! 方向一:分享你周末的时间规划 我们可以把每个月当做一个周期,制定一个简单的计划,如:第一周,锻炼身体…

手写代码-前端面试

GitHub:手写代码集合

windows任务计划程序运行bat文件,报错脚本错误:系统找不到指定的文件

先看错误: 我用windows任务计划程序运行调用python的程序,就写了一个bat,我想让他不显示命令框,所以我就加了上面可以隐藏命令框的,然后我用任务调用的时候就报错了 echo offif "%1" "h" goto b…

jenkins使用

安装插件 maven publish over ssh publish over ssh 会将打包后的jar包,通过ssh推送到指定的服务器上,,在jenkins中设置,推送后脚本,实现自动部署jar包,, 装了这个插件之后,可以在项…

一些封装电商API接口的常见步骤

电商API接口的封装是指将电商平台的功能和数据通过API接口的形式提供给开发者来调用。下面是一些封装电商API接口的常见步骤: 1. 确定需求:首先需要明确要封装的电商API接口的功能和数据,包括用户登录、商品搜索、订单管理等。Taobao。拼多多…

高并发内存池(threadcache)[1]

高并发内存池 分层处理 thread cache 定义一个公共的FreeList管理切分的小空间 static void*& NextObj(void* obj) {return *(void**)obj; }//管理切分好的小对象的自由链表 class FreeList { public:void Push(void* obj){assert(obj);//头插//*(void**)obj _freeLis…

RabbitMq-3入门案例

rabbitmq入门 1.生产者&#xff08;服务提供方&#xff09; //依赖<dependencies> <!-- rabbitmq客户端依赖--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.8.0<…

骨传导耳机会伤耳膜吗?骨传导耳机有什么优缺点一文教你读懂

骨传导耳机会伤耳膜吗? 答案是不会&#xff01;因为骨传导耳机传声完全不会经过耳膜&#xff0c;说到这里就不得不讲一下骨传导的发声原理了&#xff0c;正常情况下&#xff0c;声音传声主要分为空气传导、固体传导和液体传导&#xff0c;物理大家都学过这里就不多赘述了。 我…

用MASM32编程更新sysInfo的一些收获

近日正在更新用MASM32编写的sysInfo&#xff0c;通过WMI访问Win32_UserCount来获取系统用户帐号信息&#xff0c;访问Win32_Product来获取系统中安装的产品信息。 在进行更新过程中&#xff0c;有一些新的收获跟大家分享。 一、HTMLJavaScript构建C类代码一键转换MASM32代码平…

中科方德4.0服务器 默认自动分区,扩容根分区方法

先看分区情况是否为非LVM的ext4&#xff0c;方德默认自动分配即是此种分区&#xff1b;外部添加磁盘空间&#xff0c;虚拟机或者物理机一样&#xff1b;图形化扩展到逻辑分区&#xff0c;如图中所示的扩展分区&#xff1b;home分区扩展&#xff1b;home分区尾部留出新home分区&…

iOS 17 正式版预计 9 月中下旬发布,部分新功能延后推出

苹果公司预计将在 9 月中下旬推出 iOS 17 正式版&#xff0c;iPhone XS 及更新的机型可免费更新。这次更新包含了许多新功能&#xff0c;但是根据苹果公司的网站显示&#xff0c;并不是所有的功能都会立即可用。苹果表示有一些功能“将在今年晚些时候推出”&#xff0c;比如&am…