区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测

news2024/11/18 13:39:27

区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测

目录

    • 区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测
      • 效果一览
      • 基本介绍
      • 模型描述
      • 程序设计
      • 参考资料

效果一览

1
2
3
4

基本介绍

MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序列区间预测
QRLSTM是一种基于长短期记忆(LSTM)神经网络的模型,用于时间序列区间预测。它是使用分位数回归来进行预测的,这意味着它可以预测一系列可能的结果,而不仅仅是单个点预测。
具体来说,QRLSTM使用LSTM网络来学习时间序列的长期和短期依赖关系,然后使用分位数回归来预测一系列可能的结果。分位数回归是一种非常有用的技术,它可以预测出给定置信水平下的上限和下限,这对于时间序列预测非常有用。
QRLSTM模型的预测能力很强,特别是在处理非线性时间序列时。它已经被广泛应用于股票市场、气象预测、交通预测等领域。

模型描述

QRLSTM模型的数学公式如下:
首先,我们定义LSTM网络中的隐藏状态和细胞状态:

h t , c t = LSTM ( x t , h t − 1 , c t − 1 ) h_t,c_t=\text{LSTM}(x_t,h_{t-1},c_{t-1}) ht,ct=LSTM(xt,ht1,ct1)

  • 其中, x t x_t xt是时间步 t t t的输入, h t − 1 h_{t-1} ht1 c t − 1 c_{t-1} ct1分别是上一时间步的隐藏状态和细胞状态。

然后,我们定义分位数回归的损失函数:

L τ = ∑ i = 1 n ρ τ ( y i − f θ ( x i ) ) \mathcal{L}{\tau}=\sum{i=1}^{n}\rho_{\tau}(y_i-f_{\theta}(x_i)) Lτ=i=1nρτ(yifθ(xi))

  • 其中, τ \tau τ是分位数水平, y i y_i yi是时间序列在时间步 i i i的真实值, f θ ( x i ) f_{\theta}(x_i) fθ(xi)是模型在时间步 i i i的预测值, ρ τ ( u ) \rho_{\tau}(u) ρτ(u)是分位数损失函数:

ρ τ ( u ) = { τ u  if  u ≥ 0   ( τ − 1 ) u  if  u < 0 \rho_{\tau}(u)=\begin{cases} \tau u & \text{ if } u \geq 0 \ (\tau-1)u & \text{ if } u < 0 \end{cases} ρτ(u)={τu if u0 (τ1)u if u<0

最终我们的目标是最小化所有分位数水平下的损失函数:

L = ∑ τ ∈ τ 1 , τ 2 , . . . , τ T L τ \mathcal{L}=\sum_{\tau\in{\tau_1,\tau_2,...,\tau_T}}\mathcal{L}_{\tau} L=ττ1,τ2,...,τTLτ

  • 其中, τ 1 , τ 2 , . . . , τ T {\tau_1,\tau_2,...,\tau_T} τ1,τ2,...,τT是一组分位数水平。

QRLSTM模型使用随机梯度下降或者其他优化算法最小化上述损失函数,从而得到最优的模型参数。

程序设计

  • 完整程序和数据获取方式1,订阅《LSTM长短期记忆神经网络》(数据订阅后私信我获取):MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测,专栏外只能获取该程序。
  • 完整程序和数据获取方式2,(资源出下载):MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测
% 构建模型
numFeatures = size(XTrain,1); % 输入特征数
numHiddenUnits = 200; % 隐藏单元数
numQuantiles = 1; % 分位数数目
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    dropoutLayer(0.2)
    fullyConnectedLayer(numQuantiles)
    regressionLayer];
options = trainingOptions('adam', ...
    'MaxEpochs',50, ...
    'MiniBatchSize',64, ...
    'GradientThreshold',1, ...
    'Shuffle','every-epoch', ...
    'Verbose',false);
net = trainNetwork(XTrain,YTrain,layers,options); % 训练模型

% 测试模型
YPred = predict(net,XTest); % 预测输出
quantiles = [0.1,0.5,0.9]; % 分位数
for i = 1:length(quantiles)
    q = quantiles(i);
    epsilon = YTest - YPred(:,i); % 预测误差
    lag = 10; % 滞后期数
    sigma = median(abs(epsilon(max(1,end-lag+1):end))) * 1.483; % 置信区间
    lb = YPred(:,i) - sigma * norminv(1-q/2,0,1); % 置信区间下限
    ub = YPred(:,i) + sigma * norminv(1-q/2,0,1); % 置信区间上限
    disp(['Quantile:',num2str(q),' MAE:',num2str(mean(abs(epsilon))),' Width:',num2str(mean(ub-lb))]);
end

参考资料

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

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

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

相关文章

Rancher 安装部署

1、执行如下docker 命令 rootubuntu:~# docker run --namerancher -d --privileged --restartunless-stopped -p 30040:80 -p 30050:443 rancher/rancher:latest 这里将80端口映射成了30040端口&#xff0c;将443端口映射成了30050端口&#xff0c;所以在执行上面的名字之前&…

VSPD虚拟串口软件安装及使用

文章目录 前言一、软件安装1、Configure Virtual Serial Port Driver(VSPD)2、串口调试助手 二、使用步骤1、模拟串口2、配置串口3、收发测试①、COM8&#xff08;发&#xff09; ---> COM9&#xff08;收&#xff09;②、COM9&#xff08;发&#xff09; ---> COM8&…

DevExpress WPF Tree List组件,让数据可视化程度更高!(一)

DevExpress WPF Tree List组件是一个功能齐全、数据感知的TreeView-ListView混合体&#xff0c;可以把数据信息显示为REE、GRID或两者的组合&#xff0c;在数据绑定或非绑定模式下&#xff0c;具有完整的数据编辑支持。 DevExpress WPF 拥有120个控件和库&#xff0c;将帮助您…

XCP详解「3.3·A2L信号添加和更新」

返回 XCP详解「总目录」 目录 1、ELF/MAP文件发生变更 2、添加新信号 1、ELF/MAP文件发生变更 elf文件更新后&#xff0c;状态栏会有图标闪烁提示 ​ 选个要更新的map文件即可 ​ 2、添加新信号 在Offlin的状态下进入编辑A2L文件&#xff0c;编辑过程参照3.1 ​ AS…

华为数通HCIA-网络模型

TCP 网络通信模式 作用&#xff1a;指导网络设备的通信&#xff1b; OSI七层模型&#xff1a; 7.应用层&#xff1a;由应用层协议&#xff08;http、FTP、Telnet.&#xff09;为应用程序产生对应的数据&#xff1b; 6.表示层&#xff1a;将应用层产生的数据转换成网络设备看…

Java毕业设计—爱宠医院管理系统设计与实现【含源码、论文】

爱宠医院管理系统 获取数论文、代码、答辩PPT、安装包&#xff0c;可以查看文章底部 一、 如何安装及配置环境 要运行整个爱宠医院管理系统需要安装数据库&#xff1a;MySQL 5.5&#xff0c;开发工具&#xff1a;JDK 1.8&#xff0c;开发语开发平台&#xff1a;Eclipse&…

使用mydumper进行数据库备份还原

1.使用school数据库 create database school; use school;2.创建student&#xff0c;score表 student表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VAR…

产教融合与校企合作

1. 什么是产教融合&#xff1f; 产教融合是指职业学校根据所设专业积极开班专业产业&#xff0c;把产业与教学密切结合&#xff0c;相互支持&#xff0c;相互促进&#xff0c;把学校办成集人才培养、科学研究、科技服务为一体的产业性经营实体&#xff0c;形成学校与企业浑然一…

SpringBoot登陆+6套前端主页-【JSB项目实战】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤【JSB系列之000】 文章目录 SpringBoot系列文章目录本系列校训 SpringBoot技术很多很多环境及工具&#xff1a;上效果图主页登陆 配置文件设置导数据库项目目录如图&#xff1a;代码部分&#xff1a;控制器过滤器详细的解…

社区发现快速入门

社区发现快速入门 一、图&#xff1a;关系型数据的一种描述方式 关系型数据&#xff0c;又名“表格数据”&#xff0c;指关系数学模型中以二维表的形式来描述的数据&#xff0c;它以表格形式组织&#xff0c;使用行和列来存储和表示数据之间的关系。 关系型数据可以用实体、…

【leetcode】206.反转链表

思路1&#xff1a;取原链表的节点&#xff0c;依次头插到新链表&#xff0c;返回新链表的头 示例一反转步骤如下&#xff1a; &#x1f4d6;Note: 当cur ! NULL时&#xff0c;将cur指向的节点头插入新链表&#xff0c;首先要更改cur->next的值为newhead->next&#xff0c…

LiveNVR监控流媒体Onvif/RTSP常见问题-token有效期是多久如何设置token有效期StreamToken和URLToken

LiveNVR中token有效期是多久如何设置token有效期StreamToken和URLToken 1、获取TOKEN2、TOKEN有效期3、默认token有效期3、自定义token加密key3.1、token_key3.2、stream_token_key 4、如何配置一直有效的token4.1、URLToken4.2、StreamToken 5、动态有效期6、流地址鉴权开启后…

城市气象数据可视化:洞察气候变化,构建智慧城市

随着城市化进程的加速&#xff0c;城市气象数据的采集和分析变得越来越重要。气象数据不仅影响着人们的生活和出行&#xff0c;还与城市的发展和规划息息相关。在数字化时代&#xff0c;如何将城市中各个气象数据进行可视化&#xff0c;让复杂的数据变得简单易懂&#xff0c;成…

Linux 下使用crontab 定时打包日志并删除已被打包的日志

crontab是和用户相关的&#xff0c;每个用户有自己对应的crontab 。 cron是Linux下的定时执行工具&#xff0c;以下是重启/关闭等等的命令 #/sbin/service crond start //启动服务 #/sbin/service crond stop //关闭服务 #/sbin/service crond restart //重启服务 #/…

外壳-零基础不求人设计PCB外壳

实机演示 2D 3D 导入PCB 除了在立创eda专业版layout的可以直接做外壳 在其它EDA设计的都需要先导入PCB(如altium) 放置边框 放置正面挖槽 放置侧面挖槽 放置需要先放置侧面基准线 这样再选择侧面挖槽 选择创建的基准线就可以侧面开孔 放置上下盖固定螺丝孔 第一步上下…

【C++ OJ练习】9.最小栈

1.题目链接 力扣 2.解题思路 利用两个栈实现 3.代码 class MinStack { public:MinStack() {//两个栈来实现}void push(int val) {_st.push(val);if (_minst.empty() || _minst.top() > val){_minst.push(val);}}void pop() {if (_st.top() _minst.top())_minst.pop();…

odoo 开发入门教程系列-计算的字段和变更(Computed Fields And Onchanges)

计算的字段和变更(Computed Fields And Onchanges) 模型之间的关系是任何Odoo模块的关键组成部分。它们对于任何业务案例的建模都是必要的。然而&#xff0c;我们可能需要给定模型中字段之间的链接。有时&#xff0c;一个字段的值是根据其他字段的值确定的&#xff0c;有时我们…

每日一题7.26 23

162. 寻找峰值https://leetcode.cn/problems/find-peak-element/ 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可…

java中判断list是否为空

java中判断list是否为空是日常代码中经常遇到的问题。最近发现一个Utils提供的方法可以一步判断。 废话不多说&#xff0c;直接上代码&#xff01; ArrayList<String> arrayList new ArrayList<>(); System.out.println("集合1&#xff1a;" Collecti…

SQL-每日一题【620.有趣的电影】

题目 某城市开了一家新的电影院&#xff0c;吸引了很多人过来看电影。该电影院特别注意用户体验&#xff0c;专门有个 LED显示板做电影推荐&#xff0c;上面公布着影评和相关电影描述。 作为该电影院的信息部主管&#xff0c;您需要编写一个 SQL查询&#xff0c;找出所有影片…