当前位置: 首页 > news >正文

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

多维时序 | 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.lryc.cn/news/128292.html

相关文章:

  • Shell 编程基础01
  • Cross-Site Scripting
  • 基于java企业员工绩效考评系统设计与实现
  • SpringBoot 操作Redis、创建Redis文件夹、遍历Redis文件夹
  • c++11 标准模板(STL)(std::basic_stringbuf)(六)
  • iceberg系列之 hadoop catalog 小文件合并实战
  • 神经网络基础-神经网络补充概念-25-深层神经网络
  • MySQL— 基础语法大全及操作演示!!!(上)
  • [golang gin框架] 46.Gin商城项目-微服务实战之后台Rbac客户端调用微服务权限验证以及Rbac微服务数据库抽离
  • 域名和ip的关系
  • excel日期函数篇1
  • Leetcode151 翻转字符串中的单词
  • PHP FTP的相关函数及简单使用示例
  • 高光谱 | 矿物识别和分类标签数据制作、农作物病虫害数据分类、土壤有机质含量回归与制图、木材含水量评估和制图
  • 【数据结构】二叉树篇| 纲领思路01+刷题
  • 系统架构设计师---计算机基础知识之数据库系统结构与规范化
  • PyCharm连接Docker中的容器(ubuntu)
  • 安防视频汇聚平台EasyCVR视频监控综合管理平台H.265转码功能更新,新增分辨率配置的具体步骤
  • 全平台数据(数据库)管理工具 DataCap 管理 Rainbond 上的所有数据库
  • “深入探究JVM内部机制:从字节码到实际执行“
  • C++写文件,直接写入结构体
  • 【Spring专题】Spring之Bean的生命周期源码解析——阶段二(二)(IOC之属性填充/依赖注入)
  • 线程|线程的使用、四种实现方式
  • Facebook 应用未启用:这款应用目前无法使用,应用开发者已得知这个问题。
  • (十八)大数据实战——Hive的metastore元数据服务安装
  • ubuntu 22.04 LTS 在 llvm release/17.x 分支上编译 cookbook llvm example Chapter 02
  • 【仿写tomcat】三、通过socket读取http请求信息
  • Hive的窗口函数与行列转换函数及JSON解析函数
  • CSS中的z-index属性有什么作用?如何控制元素在层叠上下文中的显示顺序?
  • c语言——字符转ASCLL码