时序预测 | MATLAB实现EEMD-GRU、GRU集合经验模态分解结合门控循环单元时间序列预测对比

news2025/2/25 14:04:30

时序预测 | MATLAB实现EEMD-GRU、GRU集合经验模态分解结合门控循环单元时间序列预测对比

目录

    • 时序预测 | MATLAB实现EEMD-GRU、GRU集合经验模态分解结合门控循环单元时间序列预测对比
      • 效果一览
      • 基本介绍
      • 模型搭建
      • 程序设计
      • 参考资料

效果一览

在这里插入图片描述

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

基本介绍

1.MATLAB实现EEMD-GRU、GRU时间序列预测对比;
2.时间序列预测 就是先eemd把原输入全分解变成很多维作为输入 , 再输入GRU预测 ;
3.运行环境Matlab2020b及以上,输出RMSE、MAPE、MAE等多指标对比,
先运行main1_eemd_test,进行eemd分解;再运行main2_gru、main3_eemd_gru;再运行main4_compare,两个模型对比。
程序乱码是由于Matlab版本不一致造成的,处理方式如下:先重新下载程序,如XXX.m程序出现乱码,则在文件夹中找到XXX.m,右击选择打开方式为记事本文本文档(txt),查看文档是否乱码,通常不乱码,则删除Matlab中的XXX.m的全部代码,将文本文档中不乱码的代码复制到Matlab中的XXX.m中。

模型搭建

EEMD-GRU (Ensemble Empirical Mode Decomposition - Gated Recurrent Unit) 是一种将 EEMD 和 GRU 结合起来进行时间序列预测的方法。EEMD 用于将原始时间序列分解成多个固有模态函数 (Intrinsic Mode Functions, IMFs),然后 GRU 用于对这些 IMFs 进行建模和预测。
EEMD 是一种数据分解方法,将时间序列分解成多个 IMFs 和一个残差项。IMFs 是具有不同频率和振幅特征的函数,可以表示原始时间序列的不同成分。GRU (Gated Recurrent Unit):GRU 是一种循环神经网络 (Recurrent Neural Network, RNN) 的变体,具有门控机制,可以捕捉时间序列中的长期依赖关系。GRU 通过门控单元来控制信息的流动和记忆的更新。
EEMD-GRU 时间序列预测过程:
a. 将原始时间序列进行 EEMD 分解,得到多个 IMFs 和一个残差项。
b. 将每个 IMF 作为 GRU 的输入序列,训练多个 GRU 模型,每个模型对应一个 IMF。
c. 对于每个 GRU 模型,使用历史时刻的输入序列预测下一个时刻的值。
d. 将每个 GRU 模型的预测结果加权求和,得到最终的时间序列预测结果。
EEMD-GRU 时间序列预测公式:
假设有 N 个 IMFs,第 i 个 IMF 的 GRU 模型表示为 GRU_i。
对于第 i 个 GRU 模型,其输入序列为 X_i = [x_i1, x_i2, …, x_iT],其中 x_ij 表示第 i 个 IMF 在时间 j 的值。
模型 GRU_i 的预测结果为 y_i = [y_i1, y_i2, …, y_iT],其中 y_ij 表示模型 GRU_i 在时间 j 的预测值。
最终的时间序列预测结果为 y = w_1 * y_1 + w_2 * y_2 + … + w_N * y_N,其中 w_i 表示第 i 个 GRU 模型的权重。
以上是 EEMD-GRU 时间序列预测的基本原理和公式,通过将 EEMD 的分解结果与 GRU 的建模能力相结合,可以更好地捕捉时间序列的特征和趋势,提高预测的准确性。

程序设计

  • 完整程序和数据获取方式1:私信博主回复MATLAB实现EEMD-GRU、GRU集合经验模态分解结合门控循环单元时间序列预测对比,同等价值程序兑换;
  • 完整程序和数据下载方式2(资源处直接下载):MATLAB实现EEMD-GRU、GRU集合经验模态分解结合门控循环单元时间序列预测对比;
%% 创建混合网络架构
% 输入特征维度
numFeatures  = f_;
% 输出特征维度
numResponses = 1;
FiltZise = 10;
%  
    layers = [...
        % 输入特征
        sequenceInputLayer([numFeatures 1 1],'Name','input')
        sequenceFoldingLayer('Name','fold')

        dropoutLayer(0.25,'Name','drop3')
        % 全连接层
        fullyConnectedLayer(numResponses,'Name','fc')
        regressionLayer('Name','output')    ];

    layers = layerGraph(layers);
    layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');

%% 
% 批处理样本
MiniBatchSize =128;
% 最大迭代次数
MaxEpochs = 500;
    options = trainingOptions( 'adam', ...
        'MaxEpochs',500, ...
        'GradientThreshold',1, ...
        'InitialLearnRate',optVars.InitialLearnRate, ...
        'LearnRateSchedule','piecewise', ...
        'LearnRateDropPeriod',400, ...
        'LearnRateDropFactor',0.2, ...
        'L2Regularization',optVars.L2Regularization,...
        'Verbose',false, ...
        'Plots','none');

%% 训练混合网络
net = trainNetwork(XrTrain,YrTrain,layers,options);
desvio_estandar=std(x);
x=x/desvio_estandar;
xconruido=x+Nstd*randn(size(x));
[modos, o, it]=emd(xconruido,'MAXITERATIONS',MaxIter);
modos=modos/NR;
iter=it;
if NR>=2
    for i=2:NR
        xconruido=x+Nstd*randn(size(x));
        [temp, ort, it]=emd(xconruido,'MAXITERATIONS',MaxIter);
        temp=temp/NR;
        lit=length(it);
        [p liter]=size(iter);
        if lit<liter
            it=[it zeros(1,liter-lit)];
        end;
        if liter<lit
            iter=[iter zeros(p,lit-liter)];
        end;
        
        iter=[iter;it];
        
        [filas columnas]=size(temp);
        [alto ancho]=size(modos);
        diferencia=alto-filas;
        if filas>alto
            modos=[modos; zeros(abs(diferencia),ancho)];
        end;
        if alto>filas
            temp=[temp;zeros(abs(diferencia),ancho)];
        end;
        
        modos=modos+temp;
    end;
end;
its=iter;
modos=modos*desvio_estandar;

参考资料

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

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

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

相关文章

vue3多页面配置你一定会遇到的问题,踩坑指南

vue3实现多页面打包容易&#xff0c;关键是如何实现本地的开发和调试&#xff1f;我们接下来解决如下几个问题&#xff1a; 1 多页面项目的项目结构是怎样的&#xff1f; --public--src---App.vue---main.js---page1. ---App.vue---main.js----home.vue----list.vue---page2.…

Hadoop集群部署-完全分布式

文章目录 一、概述二、架构三、部署1. 基础环境配置2. 创建hadoop用户并且生成密钥3. 配置三台服务器免密登录4. Zookeeper安装5. JDK与Hadoop安装6. 配置环境变量7. 启动Zookeeper8. 配置HDFS9. 启动journalnode10. master节点格式化11. 配置YARN12. Hadoop开启Histotryserver…

无涯教程-Perl - lc函数

描述 此函数返回小写版本的EXPR,如果省略EXPR,则返回$_。 语法 以下是此函数的简单语法- lc EXPRlc返回值 此函数返回小写版本的EXPR,如果省略EXPR,则返回$_。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl$orig_string"This is Test and CAPITAL"; …

腾讯云服务器租用价格表_轻量_CVM_GPU(2023更新)

腾讯云服务器租用费用表新鲜出炉2023年更新&#xff0c;轻量应用服务器2核2G4M带宽112元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、云服务器CVM S5实例2核2G配置280.8元一年、GPU服务器GN10Xp实例145元7天&#xff0c;腾讯云服务器网…

黑马程序员Vue全套视频

Vue 2 创建vue实例 示例: <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src"https://cdn.jsdelivr.net/npm/vue2.…

全网最全ChatGPT/AIGC报告分析(365份)

本星球整理了365份ChatGPT/AIGC重磅专业报告&#xff08;更新中…&#xff09;&#xff0c;部分目录如下&#xff0c;请读者搜索关键字&#xff0c;获取报告&#xff0c;学习参阅。 https://mp.weixin.qq.com/s/hvI2Hupjx_mnPh3YGyobww 1、计算机研究报告&#xff1a;ChatCPT…

vscode里面报:‘xxx‘ is assigned a value but never used.解决办法

const setCurPage: React.Dispatch<React.SetStateAction<number>> 已声明“setCurPage”&#xff0c;但从未读取其值。ts(6133) setCurPage is assigned a value but never used.eslinttypescript-eslint/no-unused-vars 出现这个报错是eslint导致的&#xff0…

竞赛项目 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

基于Containerd容器引擎和kubeadm工具部署K8sv1.26.3

kubernetes master节点及node节点各核心组件的功能概述 master节点主要组件概述 master节点主要是k8s的控制节点&#xff0c;在master节点上主要有三个组件必不可少&#xff0c;apiserver、scheduler和controllermanager&#xff1b;etcd是集群的数据库&#xff0c;是非常核心的…

探索美颜SDK技术:实现精准人脸美化的算法与挑战

在现代社交媒体和直播平台的兴起中&#xff0c;美颜技术已成为一种不可或缺的元素&#xff0c;让用户能够在镜头前展现出最佳的自己。这种技术的背后有着复杂而精密的算法&#xff0c;由美颜SDK驱动&#xff0c;以实现精准人脸美化。本文将探讨这些算法的核心原理、应用领域以及…

代码随想录 - 链表

总结概述 链表理论基础 链表是一种通过指针串联的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null&#xff08;空指针的意思&#xff09;。 链表的…

SpringBoot自定义拦截器interceptor使用详解

Spring Boot拦截器Intercepter详解 Intercepter是由Spring提供的Intercepter拦截器&#xff0c;主要应用在日志记录、权限校验等安全管理方便。 使用过程 1.创建自定义拦截器&#xff0c;实现HandlerInterceptor接口,并按照要求重写指定方法 HandlerInterceptor接口源码&am…

4-5-tablewidget

文章目录 添加控件&#xff0c;添加行列数widget.cppwidget.h效果 添加控件&#xff0c;添加行列数 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this)…

PEFD-多投影蒸馏详细论文与代码解读(Improved Feature Distillation via Projector Ensemble)

论文链接&#xff1a;https://papers.nips.cc/paper_files/paper/2022/file/4ec0b6648bdf487a2f1c815924339022-Paper-Conference.pdf 源码链接&#xff1a;https://github.com/chenyd7/PEFD 文章目录 前言一、论文核心二、论文摘要三、论文内容四、集成投影方法五、源码环境安…

大厂急了,30+名企“报复性招人”

&#x1f4e2;紧急通知&#xff01;紧急通知&#xff01; 2024届秋招已全面开启&#xff01; 没错&#xff01;你没听错&#xff01;&#xff01;&#xff01;2024届秋招真的开始了&#xff0c;你还沉浸在暑假温柔乡&#xff0c;有些人已经拿到了offer&#xff01;惊不惊喜意…

nodejs+vue+elementui小区物业管理系统_78ahx

课题主要分为四大模块&#xff1a;即管理员模块&#xff0c;物业管理模块、业主模块和维修员模块&#xff0c;主要功能包括&#xff1a;个人中心、物业管理、业主管理、维修员管理、小区公告管理、小区信息管理、房产信息管理、车位信息管理、停车位管理、停车信息管理、缴费信…

性能测试工具RunnerGo中如何管理接口

RunnerGo是一款基于go语言开发的开源测试平台&#xff0c;支持接口管理、自动化测试、性能测试等3大测试模块&#xff0c;今天给大家带来如何使用RunnerGo进行接口管理。 RunnerGo的接口管理类似于 Apipost&#xff0c;满足绝大多数接口管理需求。以下是使用 RunnerGo 进行接口…

储能pcb的布局注意事项与制造难点

随着新能源需求的不断增长和能源结构的转型&#xff0c;储能技术的市场规模不断扩大。储能PCB作为储能系统中电池模块的重要组成部分&#xff0c;对整个系统的安全性和性能起到关键作用。今天我们就来聊聊&#xff0c;储能pcb有什么特征。 什么是储能&#xff1a;储能是指能量…

封装Ellipsis组件,亲测使用各种场景

自己封装了Ellipsis组件 基于reacttaro&#xff0c;以下是实现代码&#xff0c;分为JSX和CSS文件 JSX代码如下&#xff1a; import { FC, Fragment, JSX, useState } from react; import { Image, StandardProps, Text, View } from tarojs/components;import iconDropDown fr…

2023年初中信息技术学科暑假备课

目录 2023年初中信息技术学科暑假备课1. 创意空间1.1 教师的空间1.2 学生的空间1.3 关于FTP服务器设置 2. 什么是编程2.1 编程语言2.2 人人都应学好编程2.3. 编程难吗&#xff1f;2.4 python用途 3. 开发环境3.1 打开IDLE3.2 IDLE窗口3.2.1 shell窗口和编辑窗口 4. 项目式教学4…