时间序列预测 —— DeepAR 模型

时间序列预测 —— DeepAR 模型

DeepAR 模型是一种专门用于处理时间序列概率预测的深度学习模型,它可以自动学习数据中的复杂模式,提高预测的准确性。本文将介绍 DeepAR 模型的理论基础、优缺点,并通过 Python 实现单步预测和多步预测的完整代码。

1. DeepAR 模型简介

DeepAR 模型是由亚马逊提出的一种概率生成模型,旨在进行时间序列预测。与传统的基于深度学习的序列模型(如 LSTM 和 GRU)不同,DeepAR 考虑了时间序列的复杂模式。它采用了一种门控循环单元(Gated Recurrent Unit, GRU)的,结合了蒙特卡洛的概率生成方法,使其在处理多维时间序列数据时表现优异。

2. DeepAR 模型理论及公式

DeepAR

2.1 基本原理

DeepAR 模型的基本原理是将历史时间序列数据作为输入,通过逐步预测未来数据。模型利用历史观测值和可变长度的上下文窗口来学习数据的动态模式,并通过概率生成方法提供置信区间。传统时序预测为点预测,DeepAR为区间概率预测。

2.2 模型公式

DeepAR 模型的核心是门控循环单元(GRU)和注意力机制,其中 GRU 的更新公式如下:

GRU 的更新步骤:
z t = σ ( W z ⋅ [ h t − 1 , x t ] + b z ) r t = σ ( W r ⋅ [ h t − 1 , x t ] + b r ) h ~ t = tanh ( W ⋅ [ r t ⋅ h t − 1 , x t ] + b ) h t = ( 1 − z t ) ⋅ h t − 1 + z t ⋅ h ~ t \begin{aligned} z_t &= \sigma(W_z \cdot [h_{t-1}, x_t] + b_z) \\ r_t &= \sigma(W_r \cdot [h_{t-1}, x_t] + b_r) \\ \tilde{h}_t &= \text{tanh}(W \cdot [r_t \cdot h_{t-1}, x_t] + b) \\ h_t &= (1 - z_t) \cdot h_{t-1} + z_t \cdot \tilde{h}_t \end{aligned} ztrth~tht=σ(Wz[ht1,xt]+bz)=σ(Wr[ht1,xt]+br)=tanh(W[rtht1,xt]+b)=(1zt)ht1+zth~t

其中:

  • z t z_t zt 是更新门,控制要从候选隐藏状态 (\tilde{h}_t) 中选择多少信息传递给新的隐藏状态。
  • r t r_t rt 是重置门,控制要忽略前一时刻隐藏状态的程度。
    - h ~ t \tilde{h}_t h~t是候选隐藏状态。
  • h t h_t ht 是当前时刻的隐藏状态。

2.3 模型结构

DeepAR 模型结构包括多层 GRU 单元,每一层都有自己的权重和偏差。模型还使用了注意力机制,以便更好地处理长序列。DeepAR以蒙特卡罗样本的形式进行概率预测,该样本可用于计算预测视界内所有子范围的一致分位数估

3. DeepAR 与其他模型的区别

相较于传统的序列模型,DeepAR 在以下方面有显著的不同之处:

  • 考虑季节性和周期性: DeepAR 能够自动学习和捕捉数据中的季节性和周期性模式,而无需手动调整。

  • 多维时间序列处理: DeepAR 能够有效处理多维时间序列,同时考虑多个时间序列之间的相关性。

4. DeepAR 模型优缺点

4.1 优点

  • 自动捕捉复杂模式: DeepAR 能够自动捕捉时间序列中的复杂模式,无需手动特征工程。

  • 概率生成: 模型提供了预测的概率分布,可以用于构建置信区间。

4.2 缺点

  • 计算成本较高: 模型的训练和预测过程相对较慢,尤其

在处理大规模数据时。

5. DeepAR 模型 Python 实现

下面将通过 Python 代码演示 DeepAR 模型的单步预测和多步预测。请确保已安装必要的库:

pip install mxnet gluonts

5.1 单步预测代码

# 导入必要的库
from gluonts.model.deepar import DeepAREstimator
from gluonts.dataset.common import ListDataset
from gluonts.trainer import Trainer# 创建示例数据(替换为你自己的数据)
train_data = [...]  # 训练数据
test_data = [...]   # 测试数据# 将数据转换为 ListDataset 格式
train_ds = ListDataset([{"start": "2022-01-01", "target": train_data}], freq="D")
test_ds = ListDataset([{"start": "2022-01-10", "target": test_data}], freq="D")# 定义 DeepAR 模型参数
estimator = DeepAREstimator(freq="D", prediction_length=7, trainer=Trainer(epochs=10))# 训练模型
predictor = estimator.train(train_ds)# 单步预测
single_step_forecast = predictor.predict(test_ds)# 打印预测结果
print(single_step_forecast.mean)

5.2 多步预测代码

# 导入必要的库
from gluonts.model.deepar import DeepAREstimator
from gluonts.dataset.common import ListDataset
from gluonts.trainer import Trainer# 创建示例数据(替换为你自己的数据)
train_data = [...]  # 训练数据
test_data = [...]   # 测试数据# 将数据转换为 ListDataset 格式
train_ds = ListDataset([{"start": "2022-01-01", "target": train_data}], freq="D")
test_ds = ListDataset([{"start": "2022-01-10", "target": test_data}], freq="D")# 定义 DeepAR 模型参数
estimator = DeepAREstimator(freq="D", prediction_length=14, trainer=Trainer(epochs=10))# 训练模型
predictor = estimator.train(train_ds)# 多步预测
multi_step_forecast = predictor.predict(test_ds)# 打印预测结果
print(multi_step_forecast.mean)

6. 总结

本文介绍了时间序列预测中的 DeepAR 模型,包括其理论基础、优缺点以及与其他模型的区别。通过 Python 代码演示了 DeepAR 模型的单步预测和多步预测,希望读者能够更好地理解和应用这一强大的时间序列预测模型。在实际应用中,可以根据具体问题进行模型参数的调整和优化。

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

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

相关文章

JavaScript滚动事件

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 滚动是网页交互不可或缺的一部分。监听页面和元素的滚动事件,可以帮助…

数解 transformer 之 self attention transformer 公式整理

句子长度为n;比如2048,或1024,即,一句话最多可以是1024个单词。 1, 位置编码 可知,E是由n个列向量组成的矩阵,每个列向量表示该列号的位置编码向量。 2, 输入向量 加入本句话第一个单词的词嵌入向量是, 第…

汽车零部件MES系统解决方案

汽车零部件行业现状 随着全球汽车产业不断升级,汽车零部件市场竞争日趋激烈,从上游的钢铁、塑料、橡胶等生产到下游的主机厂配套制造,均已成为全球各国汽车制造大佬战略目标调整的焦点,其意欲在汽车零部件行业快速开疆扩土&#x…

EMC学习笔记(二十二)降低EMI的PCB设计指南(二)

降低EMI的PCB设计指南(二) 1.电源和地概述2.电感量3.两层板和四层板4.单层和双层设计中的微控制器接地5.信号返回地6.模拟、数字信号与大功率电源7.模拟电源引脚和模拟参考电源8.四层板电源设计参考注意事项 tips:资料主要来自网络&#xff0…

Go语言的100个错误使用场景(30-40)|数据类型与字符串使用

前言 大家好,这里是白泽。 《Go语言的100个错误以及如何避免》 是最近朋友推荐我阅读的书籍,我初步浏览之后,大为惊喜。就像这书中第一章的标题说到的:“Go: Simple to learn but hard to master”,整本书通过分析100…

【Rust日报】2024-02-08 Loungy:使用 Rust 和 GPUI 开发的 MacOS 启动器

Mira Screenshare:基于 Rust 和 WebRTC 的高性能屏幕分享工具 一群大学生宣布推出了他们的期末项目:Mira Screenshare,一个开源、高性能的屏幕共享工具,由 Rust 和 WebRTC 构建。此项目支持 4k 60 FPS 和 110ms 端到端延迟的屏幕…

这种学习单片机的顺序是否合理?

这种学习单片机的顺序是否合理? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&#xff01…

图像处理之《鲁棒图像隐写术:隐藏频率系数中的信息》论文精读

一、文章摘要 隐写术是一种将秘密信息隐藏到公共多媒体对象中而不会引起第三方怀疑的技术。然而,大多数现有的工作不能提供良好的抗有损JPEG压缩鲁棒性,同时保持相对较大的嵌入容量。提出了一种基于可逆神经网络的端到端鲁棒隐写系统。该方法将秘密信息…

【开源】基于JAVA+Vue+SpringBoot的智慧社区业务综合平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 业务类型模块2.2 基础业务模块2.3 预约业务模块2.4 反馈管理模块2.5 社区新闻模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 业务类型表3.2.2 基础业务表3.2.3 预约业务表3.2.4 反馈表3.2.5 社区新闻表 四、系统展…

【Python中Selenium元素定位的各种方法】

1、元素定位操作: 2、创建浏览器驱动操作,导入By模块: from selenium import webdriver # 用于界面与浏览器互动 from selenium.webdriver.common.by import By # 用于元素定位 driver webdriver.Chrome() # 调用Chrome类,创…

知识图谱与图神经网络融合:构建智能应用的新前沿

目录 前言1 知识图谱表示学习1.1 典型模型1.2 下游任务 2 图神经网络与知识图谱表示学习2.1 Compgcn:合成图卷积模型2.2 知识图谱嵌入在归纳设置下的推进 3 图神经网络与知识图谱构建3.1 关系抽取的进阶应用3.2 结构信息补全与知识图谱的完整性 4 图神经网络与知识图…

基于css-vars-ponyfill实现换肤

文章目录 一、换肤二、换肤调研2.1、ElementUI2.2、ant.design 三、换肤痛点和思考四、换肤架构五、换肤技术选型和实现5.1、该方案的亮点和规则5.2、核心原理5.3、色组 & 色值平台设计5.4、获取在当前主题自定义变量颜色 六、总结七、最后 一、换肤 网站或者应用一键切换…

【大厂AI课学习笔记】【1.5 AI技术领域】(8)文本分类

8,9,10,将分别讨论自然语言处理领域的3个重要场景。 自然语言处理,Natual Language Processing,NLP,包括自然语言识别和自然语言生成。 用途是从非结构化的文本数据中,发掘洞见,并访问这些信息&#xff0…

Flume安装部署

安装部署 安装包连接:链接:https://pan.baidu.com/s/1m0d5O3Q2eH14BpWsGGfbLw?pwd6666 (1)将apache-flume-1.10.1-bin.tar.gz上传到linux的/opt/software目录下 (2)解压apache-flume-1.10.1-bin.tar.gz…

【Spring框架】Spring事务同步

目录 一、什么是Spring事务同步 二、 事务同步管理器 2.1 TransactionSynchronizationManager事务同步管理器 2.1.1 资源同步 2.1.2 事务同步 2.1.3 总结 三、事务同步管理器保障事务的原理 四、spring事务为何使用TransactionSynchronizationManager spring源码实现 …

书生·浦语大模型第三课作业

基础作业: 复现课程知识库助手搭建过程 (截图) 进阶作业: 选择一个垂直领域,收集该领域的专业资料构建专业知识库,并搭建专业问答助手,并在 OpenXLab 上成功部署(截图,并提供应用地址&#x…

【Web】基于Mybatis的SQL注入漏洞利用点学习笔记

目录 MyBatis传参占位符区别 不能直接用#{}的情况 in多参数值查询 like %%模糊查询 order by列名参数化 MyBatis传参占位符区别 在 MyBatis 中,#{} 和 ${} 都是用于传参的占位符,但它们之间有很大的区别,主要体现在两个方面&#xff1a…

计算机网络基础 第四章——介质访问控制子层 知识点(上)

4.1局域网技术的发展与演变 1.访问控制的基本概念 介质访问控制(MAC)是所有“共享介质"类型的局域网都必须解决的共性问题。理解 介质访问控制方法的基本概念,需要注意以下两个问题。 (1)对术语“共享介质”、“多路访问”与“冲突"的理解 由于“共享介质”与“多…

如何开发一个游戏平台?

随着科技的进步和互联网的普及,游戏行业正在迅速发展。游戏平台的开发已成为游戏行业的一个重要组成部分。开发一个游戏平台需要深入了解游戏行业,掌握相关技术,并具备创新思维。以下是一些关于如何开发一个游戏平台的建议: 市场调…

STL - map 和 set

1、关联式容器 vector、list、deque、 forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面 存储的是元素本身 关联式容器也是用来存储数据的&#xff0c;与序列式容器不同的是&#xff0c;其里面存储的是<…