WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测

ops/2025/1/21 14:08:40/

AttentionCNNGRUAttentionWOACNNGRUCNNGRU_0">CNN-GRU.html" title=WOA-CNN-GRU>WOA-CNN-GRU-AttentionCNN-GRU-AttentionCNN-GRU.html" title=WOA-CNN-GRU>WOA-CNN-GRUCNN-GRU四模型对比多变量时序预测

目录

预测效果

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

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

基本介绍

基于CNN-GRU.html" title=WOA-CNN-GRU>WOA-CNN-GRU-AttentionCNN-GRU-AttentionCNN-GRU.html" title=WOA-CNN-GRU>WOA-CNN-GRUCNN-GRU四模型多变量时序预测一键对比(仅运行一个main即可)

Matlab代码,每个模型的预测结果和组合对比结果都有!
1.无需繁琐步骤,只需要运行一个main即可一键出所有图像。
2.程序已经调试好,无需更改代码替换数据集即可运行!!!数据格式为excel!
3.WOA优化参数为:隐藏层节点数,学习率,正则化系数。
4.鲸鱼优化算法(whale optimization algorithm,WOA)是由Mirjalili和Lewis于2016年提出的一种新型群体智能优化搜索方法,它源于对自然界中座头鲸群体狩猎行为的模拟,该算法整个过程包含搜索觅食、收缩包围和螺旋更新位置三个阶段。鲸鱼优化算法的三个种群更新机制相互独立,因此其寻优阶段的全局探索和局部开发过程得以分别运行及控制。此外, 鲸鱼优化算法不需要人为的设置各种控制参数值, 提高了算法的使用效率并降低了应用难度。与其它群体智能优化算法相比, WOA算法结构新颖, 控制参数少,在许多数值优化和工程问题的求解中表现出较好的寻优性能,优于蚁群算法和粒子群算法等智能优化算法。
5.运行环境要求MATLAB版本为2023b及其以上。
评价指标包括:R2、MAE、MSE、RPD、RMSE等,图很多
代码中文注释清晰,质量极高,赠送测试数据集,可以直接运行源程序。替换你的数据即可用 适合新手小白

程序设计

%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行%%  导入数据
result = xlsread('数据集.xlsx');%%  数据分析
num_samples = length(result);  % 样本个数
kim = 2;                       % 延时步长(前面多行历史数据作为自变量)
zim =  1;                      % 跨zim个时间点进行预测
nim = size(result, 2) - 1;     % 原始数据的特征是数目%%  数据集分析
outdim = 1;                                  % 最后一列为输出
num_size = 0.7;                              % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim;                  % 输入特征长度%%  划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, -1, 1);%将训练集和测试集的数据调整到01之间
p_test = mapminmax('apply', P_test, ps_input);[t_train, ps_output] = mapminmax(T_train, -1, 1);% 对测试集数据做归一化
t_test = mapminmax('apply', T_test, ps_output);%%  得到最优参数
best_hd = round( Best_pos(1,3));    %  最佳隐藏层节点数
best_lr = abs(Best_pos(1,2));       %  最佳初始学习率
best_l2 = abs(Best_pos(1,1));       %  最佳L2正则化系数%% 建立模型
lgraph = layerGraph();                                                   % 建立空白网络结构
tempLayers = [sequenceInputLayer([f_, 1, 1], "Name", "sequence")              % 建立输入层,输入数据结构为[f_, 1, 1]sequenceFoldingLayer("Name", "seqfold")];                            % 建立序列折叠层
lgraph = addLayers(lgraph, tempLayers);                                  % 将上述网络结构加入空白结构中
tempLayers = [convolution2dLayer([3, 1], 16, "Name", "conv_1", "Padding", "same")  % 建立卷积层,卷积核大小[3, 1]16个特征图reluLayer("Name", "relu_1")                                          % Relu 激活层convolution2dLayer([3, 1], 32, "Name", "conv_2", "Padding", "same")  % 建立卷积层,卷积核大小[3, 1]32个特征图reluLayer("Name", "relu_2")];                                        % Relu 激活层
lgraph = addLayers(lgraph, tempLayers);                                  % 将上述网络结构加入空白结构中tempLayers = [sequenceUnfoldingLayer("Name", "sequnfold")                      % 建立序列反折叠层flattenLayer("Name", "flatten")                                  % 网络铺平层gruLayer(best_hd, "Name", "gru", "OutputMode","last")                % GRU层fullyConnectedLayer(outdim, "Name", "fc")                             % 全连接层regressionLayer("Name", "regressionoutput")];                    % 回归层lgraph = addLayers(lgraph, tempLayers);                              % 将上述网络结构加入空白结构中
lgraph = connectLayers(lgraph, "seqfold/out", "conv_1");             % 折叠层输出 连接 卷积层输入
lgraph = connectLayers(lgraph, "seqfold/miniBatchSize", "sequnfold/miniBatchSize"); % 折叠层输出连接反折叠层输入% 激活层输出 连接 反折叠层输入%% 参数设置
options = trainingOptions('adam', ...     % Adam 梯度下降算法'MaxEpochs', 50,...                 % 最大训练次数 1000'MiniBatchSize',512, ...                %批大小'InitialLearnRate', best_lr,...          % 初始学习率为0.001'L2Regularization', best_l2,...         % L2正则化参数'LearnRateSchedule', 'piecewise',...  % 学习率下降'LearnRateDropFactor', 0.1,...        % 学习率下降因子 0.1'LearnRateDropPeriod', 40,...        % 经过800次训练后 学习率为 0.001*0.1'Shuffle', 'every-epoch',...          % 每次训练打乱数据集'ValidationPatience', Inf,...         % 关闭验证'Plots', 'none',...      % 画出曲线'Verbose', false);

参考资料

[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.ppmy.cn/ops/151926.html

相关文章

LLM大语言模型的分类

从架构和功能的角度来看,LLM(Large Language Model,大语言模型)主要可以分为以下几种类型: **1. 基础语言模型:** * **定义:** 通过在大规模文本数据上进行预训练,学习语言的规律和模式&#…

基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台

系统说明 基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台, 同时支持微服务架构和单体架构提供对 Spring Authorization Server 生产级实践,支持多种安全授权模式提供对常见容器化方案支持 Kubernetes、Rancher2 、Kubesphere、EDA…

qml OpacityMask详解

1、概述 OpacityMask是QML(Qt Meta-Object Language)中的一种图形效果,它使用另一个项目(通常是一个图像或图形项)作为遮罩来控制源项目的透明度。这种效果允许开发者通过遮罩的alpha通道来精确地控制源项目中哪些部分…

EXTI外部中断

68个中断源,这个是F1系列最多的中断数量,对于一个具体的型号,可能没有这么多中断,所以这个数量看看就行,具体以对应型号的数据手册为准。接着STM32的中断包含EXTI外部中断,TIM定时器,ADC模数转换…

Golang学习笔记_27——单例模式

Golang学习笔记_24——泛型 Golang学习笔记_25——协程Golang学习笔记_25——协程 Golang学习笔记_26——通道 文章目录 单例模式1. 介绍2. 应用场景3. 实现3.1 饿汉式3.2 懒汉模式 源码 单例模式 1. 介绍 单例模式是一种创建型设计模式,它确保一个类只有一个实例…

数据结构——链表和单向链表

1、链表的介绍 (1)定义 链表是一种链式存储的线性表 链表是一种基本的数据结构,它由一系列节点组成,每个节点包含一个值和指向下一个节点的指针 节点如下图所示: 与数组不同,链表中的节点不一定是连续的…

【漫话机器学习系列】054.极值(Extrema)

极值(Extrema) 定义 极值是数学分析和优化问题中的一个核心概念,指函数在某个定义域内取得的最大值或最小值。根据极值的性质,可以将其分为两类: 局部极值(Local Extrema):函数在…

Micrometer+Zipkin 分布式链路追踪

MicrometerZipkin 分布式链路追踪(Distributed Tracing)是一种用于监控和分析分布式系统性能的技术。它允许开发人员和运维人员追踪请求在分布式系统中的传播路径,包括跨服务调用、数据库访问、缓存查询等操作。通过分布式链路追踪&#xff0…