区间预测 | MATLAB实现QRCNN-LSTM卷积长短期记忆神经网络分位数回归时间序列区间预测

news2024/10/7 15:24:24

区间预测 | MATLAB实现QRCNN-LSTM卷积长短期记忆神经网络分位数回归时间序列区间预测

目录

    • 区间预测 | MATLAB实现QRCNN-LSTM卷积长短期记忆神经网络分位数回归时间序列区间预测
      • 效果一览
      • 基本介绍
      • 模型描述
      • 程序设计
      • 参考资料

效果一览

1
2
3

基本介绍

1.Matlab实现基于QRCNN-LSTM分位数回归卷积长短期记忆神经网络的时间序列区间预测模型;
2.多图输出、多指标输出(MAE、RMSE、MSE、R2),多输入单输出,含不同置信区间图、概率密度图;
3.data为数据集,功率数据集,用过去一段时间的变量,预测目标,目标为最后一列,也可适用于负荷预测、风速预测;MainQRCNN_LSTMTS为主程序,其余为函数文件,无需运行;
4.代码质量高,注释清楚,含数据预处理部分,处理缺失值,如果为nan,用上一行替代,也含核密度估计;

模型描述

QRCNN-LSTM是一种结合了卷积神经网络(CNN)和长短期记忆神经网络(LSTM)的深度学习模型,用于时间序列预测。它的核心思想是将CNN用于提取时间序列的局部特征,然后将这些特征输入到LSTM中进行整体建模。在此基础上,QRCNN-LSTM模型还引入了分位数回归(Quantile Regression)的概念,可以用于预测时间序列的不同分位数区间范围内的值,从而提高了模型的预测能力。
具体来说,QRCNN-LSTM模型将时间序列划分为不同的区间,每个区间内包含若干个连续的时间步长。对于每个区间,模型使用CNN提取局部特征,然后将这些特征输入到LSTM中进行整体建模,得到该区间内的预测结果。而为了预测不同分位数区间的值,模型在LSTM的输出层引入了多个输出节点,每个节点对应一个分位数,从而可以同时预测不同分位数的值。
总的来说,QRCNN-LSTM模型在时间序列预测中具有较强的能力,可以应用于多个领域,如金融、气象、能源等。

  • QRCNN-LSTM模型的具体公式如下:

  • 首先,对于输入的时间序列数据 x t x_t xt,我们可以通过CNN提取出局部特征 v t ( i ) v_t^{(i)} vt(i)

v t ( i ) = f ( W ( i ) ∗ x t : t + h − 1 + b ( i ) ) v_t^{(i)} = f(W^{(i)} * x_{t:t+h-1} + b^{(i)}) vt(i)=f(W(i)xt:t+h1+b(i))

  • 其中, W ( i ) W^{(i)} W(i) b ( i ) b^{(i)} b(i) 分别表示CNN中的卷积核和偏置项, h h h 表示卷积核的大小, f f f 表示激活函数, ∗ * 表示卷积操作, x t : t + h − 1 x_{t:t+h-1} xt:t+h1 表示从 t t t t + h − 1 t+h-1 t+h1 的时间步数据。这里 v t ( i ) v_t^{(i)} vt(i) 表示第 i i i 个卷积核提取出的局部特征。

  • 接下来,我们将所有的局部特征 v t ( 1 ) , v t ( 2 ) , . . . , v t ( n ) v_t^{(1)}, v_t^{(2)}, ..., v_t^{(n)} vt(1),vt(2),...,vt(n) 拼接起来,并通过一个全连接层将其映射到一个低维的隐层状态 h t h_t ht

h t = g ( W h [ v t ( 1 ) ; v t ( 2 ) ; . . . ; v t ( n ) ] + b h ) h_t = g(W_h[v_t^{(1)};v_t^{(2)};...;v_t^{(n)}] + b_h) ht=g(Wh[vt(1);vt(2);...;vt(n)]+bh)

  • 其中, W h W_h Wh b h b_h bh 分别表示全连接层的权重和偏置项, [ v t ( 1 ) ; v t ( 2 ) ; . . . ; v t ( n ) ] [v_t^{(1)};v_t^{(2)};...;v_t^{(n)}] [vt(1);vt(2);...;vt(n)] 表示将所有局部特征拼接起来, g g g 表示激活函数。这里 h t h_t ht 表示时间步 t t t 的隐层状态。

  • 最后,我们使用LSTM对隐层状态 h t h_t ht 进行建模,并在输出层引入多个输出节点进行分位数回归,得到不同分位数区间的预测结果。具体地,LSTM的计算公式为:

i t = σ ( W i i x t + b i i + W h i h t − 1 + b h i )   f t = σ ( W i f x t + b i f + W h f h t − 1 + b h f )   o t = σ ( W i o x t + b i o + W h o h t − 1 + b h o )   c t = f t ⊙ c t − 1 + i t ⊙ tanh ⁡ ( W i c x t + b i c + W h c h t − 1 + b h c )   h t = o t ⊙ tanh ⁡ ( c t ) \begin{aligned} i_t &= \sigma(W_{ii} x_t + b_{ii} + W_{hi} h_{t-1} + b_{hi}) \ f_t &= \sigma(W_{if} x_t + b_{if} + W_{hf} h_{t-1} + b_{hf}) \ o_t &= \sigma(W_{io} x_t + b_{io} + W_{ho} h_{t-1} + b_{ho}) \ c_t &= f_t \odot c_{t-1} + i_t \odot \tanh(W_{ic} x_t + b_{ic} + W_{hc} h_{t-1} + b_{hc}) \ h_t &= o_t \odot \tanh(c_t) \end{aligned} it=σ(Wiixt+bii+Whiht1+bhi) ft=σ(Wifxt+bif+Whfht1+bhf) ot=σ(Wioxt+bio+Whoht1+bho) ct=ftct1+ittanh(Wicxt+bic+Whcht1+bhc) ht=ottanh(ct)

  • 其中, i t , f t , o t i_t, f_t, o_t it,ft,ot 分别表示输入门、遗忘门和输出门的激活值, σ \sigma σ 表示sigmoid函数, ⊙ \odot 表示逐元素乘积, c t c_t ct 表示细胞状态, tanh ⁡ \tanh tanh 表示双曲正切函数。在输出层,我们引入 K K K 个输出节点,每个节点对应一个分位数,假设第 k k k 个节点的输出为 y k , t y_{k,t} yk,t,则其计算公式为:

y k , t = W o u t , k h t + b o u t , k y_{k,t} = W_{out,k} h_t + b_{out,k} yk,t=Wout,kht+bout,k

  • 其中, W o u t , k W_{out,k} Wout,k b o u t , k b_{out,k} bout,k 分别表示第 k k k 个节点的权重和偏置项。在训练时,我们使用分位数损失函数对模型进行优化:

L τ = { τ ( y t − y ^ τ , t ) if  y t − y ^ τ , t ≥ 0   ( τ − 1 ) ( y t − y ^ τ , t ) otherwise L_{\tau} = \begin{cases} \tau(y_t - \hat{y}{\tau,t}) & \text{if } y_t - \hat{y}{\tau,t} \geq 0 \ (\tau - 1)(y_t - \hat{y}_{\tau,t}) & \text{otherwise} \end{cases} Lτ={τ(yty^τ,t)if yty^τ,t0 (τ1)(yty^τ,t)otherwise

  • 其中, τ \tau τ 表示分位数, y t y_t yt 表示真实值, y ^ τ , t \hat{y}_{\tau,t} y^τ,t 表示模型预测的 τ \tau τ 分位数值。

QRCNN-LSTM模型的原理是将CNN和LSTM这两种不同类型的神经网络结合起来,利用CNN提取时间序列的局部特征,再用LSTM对整体进行建模,从而能够更好地捕捉时间序列中的长期依赖关系和局部特征。同时,模型还引入了分位数回归的概念,可以预测时间序列在不同分位数区间的值,提高了模型的预测能力。

程序设计

  • 完整程序和数据获取方式:私信博主。
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 加载数据
load data.mat
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 模型参数
numFilters = 128; % 滤波器数量
filterSize = 5; % 滤波器大小
numHiddenUnits = 256; % LSTM隐单元数量
dropoutRate = 0.2; % dropout率
numQuantiles = 3; % 分位数数量
learningRate = 0.001; % 学习率
numEpochs = 50; % 训练轮数
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 构建QRCNN-LSTM模型
inputLayer = sequenceInputLayer(inputSize);
convLayer = convolution1dLayer(filterSize,numFilters,'Padding','same');
lstmLayer = lstmLayer(numHiddenUnits,'OutputMode','last');
dropoutLayer = dropoutLayer(dropoutRate);
fcLayer = fullyConnectedLayer(numQuantiles);
outputLayer = regressionLayer();
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
layers = [inputLayer
          convLayer
          lstmLayer
          dropoutLayer
          fcLayer
          outputLayer];
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 设置训练选项
options = trainingOptions('adam', ...
    'LearnRateSchedule','piecewise', ...
    'LearnRateDropFactor',0.1, ...
    'LearnRateDropPeriod',5, ...
    'MaxEpochs',numEpochs, ...
    'MiniBatchSize',32, ...
    'GradientThreshold',1, ...
    'Shuffle','every-epoch', ...
    'Verbose',1, ...
    'Plots','training-progress');
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 训练模型
net = trainNetwork(XTrain,YTrain,layers,options);

% 预测
YPred = predict(net,XTest);
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 展示结果
figure
plot(YTest)
hold on
plot(YPred)
legend('True','Predicted')
xlabel('Time')
ylabel('Data')

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/127931217
[2] https://blog.csdn.net/kjm13182345320/article/details/127418340

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

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

相关文章

Elasticsearch:如何在 Elasticsearch 中存储复杂的关系数据

在传统的数据库中,对数据关系的描述无外乎三种:一对一、一对多和多对多关系。 如果有关系相关的数据,我们一般在建表的时候加上主外键。 建立数据链接,然后在查询或者统计中通过 join 恢复或者补全数据,最后得到我们需…

Springboot +Flowable,设置流程变量的方式(二)

一.简介 为什么需要流程变量。 举个例子,假设有如下一个流程,截图如下: 这是一个请假流程,那么谁请假、请几天、起始时间、请假理由等等,这些都需要说明,不然领导审批的依据是啥?那么如何传递…

软件测试面试宝典,最常见的7个高频面试题(附答案,建议收藏)

收集了2022年所有黑马学员的面试题后,负责就业的黑马讲师们整理出了7个高频出现的面试题,一起来看看。 高频问题1:请自我介绍下? 高频问题2:请介绍下最近做过的项目? 高频问题3:请介绍下你印象…

2023 年第三届长三角高校数学建模 A 题 快递包裹装箱优化问题

2022 年,中国一年的包裹已经超过 1000 亿件,占据了全球快递事务量的一 半以上。近几年,中国每年新增包裹数量相当于美国整个国家一年的包裹数量, 十年前中国还是物流成本最昂贵的国家,当前中国已经建立起全世界最强大、…

利用jQuery做一个简单的猜数字游戏

目录 利用jQuery做一个简单的猜数字游戏 代码 效果 利用jQuery做一个简单的猜数字游戏 代码 <!DOCTYPE html> <html><head><title>键盘事件-猜数字</title><style>#body_style {background-color: #c7f5db;}#myDiv {position: absolu…

单片机GD32F303RCT6 (Macos环境)开发 (十七)—— i2c1从机中断接收发送数据

i2c1从机中断接收发送数据 1、将i2c1设置为从机模式&#xff0c;与树莓派连接。树莓派发送或者读取数据&#xff0c;gd32中断触发&#xff0c;从而接收数据或者向主机发送数据。 2、关于代码的宏定义配置 Application目录的Makefile中 ENABLE_I2C_TEST yes才会编译I2C1的相关…

为啥马斯克一边反对Open AI,一边又自己另搞AI

这事我过去就说过&#xff0c;我现在再老生常谈一次。 &#xff08;1&#xff09; 我过去说过一个事&#xff1a;汽车自己智能其实还不能做到真正的智能&#xff0c;必须车路人都智能了&#xff0c;智能汽车才能真正智能。 因为车路人智能&#xff0c;这本质是数字世界和数字世…

开源之夏 2023 | 与 Databend 一同探索云数仓的魅力

活动概览 开源之夏是由中科院软件所“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;培养和发掘更多优秀的开发者&#xff0c;促进优秀开源软件社区的蓬勃发展&#xff0c;助力开源软件供应链…

基于AT89C52单片机的交通信号灯设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87772657 源码获取 主要内容&#xff1a; 本次设计所提出的一种基于单片机技术的简易计算器的方案&#xff0c;能更好的解决计算机计算的问题,随着数字生活的到来&…

eSIM-GSMA-1-EID规则定义

规范 SGP.02-v4.0.pdf Official Document SGP.02 - Remote Provisioning Architecture for Embedded UICC Technical Specification eid管理规则-SGP.29-1.0 EID Principles 国家编号机构发布 ICCID 的现有机制&#xff0c;以及后续的用户识别不受影响 EID 的核心目的是唯…

知识管理协同工具:助力企业综合信息规整化发展

随着信息化时代的来临&#xff0c;企业面临的信息越来越庞杂&#xff0c;如何管理和利用这些信息成为了企业发展的关键。知识管理作为一种新型的管理思想和方法&#xff0c;已经被广泛应用于企业管理中。知识管理工具是知识管理的重要手段之一&#xff0c;它可以帮助企业实现信…

STM32的功耗模式

按功耗由高到低排列&#xff0c; STM32 具有运行、睡眠、停止和待机四种工作模式。 低功耗各模式下芯片工作情况&#xff1a; 睡眠模式&#xff1a;仅关闭了内核时钟&#xff0c;内核停止运行&#xff0c;但其片上外设&#xff0c; CM4 核心的外设全都还照常 运行。有两种方式…

一款开源免费、非常好用的的SSH/SFTP客户端Electerm

electerm是一款基于electron开发的SSH/SFTP客户端&#xff0c;同时支持Linux、MAC、Windows操作系统&#xff0c;免费开源。 下载地址 Releases electerm/electerm (github.com) 点击下图箭头所指&#xff0c;下载windwos版本 安装 双击安装&#xff0c;等待安装完成 使用…

Melis4.0[D1s]:8.显示测试:图片格式和透明度

文章目录 1.准备素材图片1.1 测试图片像素格式的软件RawViewer.exe1.1.1 使用方法 1.2 自己生成测试图片 2.D1s显示引擎介绍&#xff08;不保证正确&#xff09;2.1 D1s 可以有2个独立的display device输出&#xff08;可以同时接2个显示器&#xff09;2.2 D1s 的 DISP0 有2个通…

普罗米修斯-docker安装

prometheus 监控原理 1、prometheus &#xff1a;虽然说是监控平台&#xff0c;但是实际上是一套数据库 2、mysql_exporter: 可以理解成程序或者软件&#xff0c;他是工作在我们要监控的目标服务器上&#xff0c;主要是用于监控mysql的数据。 3、node_exporter: 他的作用主要是…

Java 3种IO模型,一次搞懂

大家好&#xff0c;我是老三&#xff0c;上一节我们讨论了Linux的五种IO模型&#xff0c;接下来&#xff0c;我们从Java语言层面&#xff0c;来看看对IO的实现。 在Java中&#xff0c;一共有三种IO模型&#xff0c;分别是阻塞IO(BIO)、非阻塞IO(NIO)和异步IO(AIO)。 Java BIO …

IDEA “Cannot resolve symbol” 解决办法

系列文章目录 文章目录 系列文章目录前言一、Cannot resolve symbol是什么问题&#xff1f;二、第一步&#xff1a;检查Maven配置三、第二步&#xff1a;检查target四、 第三步&#xff1a;检查 project五、第四步&#xff1a;lombok 问题总结 前言 请耐心读完&#xff0c;也许…

FE_Vue框架的重要属性讲解【ref props mixin】

1 ref属性 对于传统的HTML而言&#xff0c;id 和 ref确实没有什么差别&#xff0c;但是对于组件来说就不一样了。给组件加id&#xff0c;打印出获取的结果为组件所对应的完整DOM结构。给组件加ref&#xff0c;打印出获取的结果就是VueComponent实例。 被用来给元素或子组件注册…

【SpringCloud微服务实践】注册与发现(Eureka)

注册与发现(Eureka) 注册与发现初实践&#xff0c;注册中心采用SpringCloud全家桶中的Eureka&#xff0c;并配合RestTemplate从Euraka调用微服务。 在前置章节的电影票-用户服务组的基础上升级&#xff0c;摒弃硬编码微服务地址的方案&#xff0c;使用eureka实现微服务的动态…

计算机毕业论文选题推荐|软件工程|系列三

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言) 一体化智慧停车…