时间序列预测 —— 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://www.hqwc.cn/news/454914.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣题目训练(7)

2024年1月31日力扣题目训练 2024年1月31日力扣题目训练387. 字符串中的第一个唯一字符389. 找不同401. 二进制手表109. 有序链表转换二叉搜索树114. 二叉树展开为链表52. N 皇后 II 2024年1月31日力扣题目训练 2024年1月31日第七天编程训练,今天主要是进行一些题训…

MySQL数据库③_MySQL数据类型和测试

目录 1. MySQL数据类型分类 1.1 类型汇总 1.2 整数类型 1.3 浮点数类型和定点数类型 1.4 字符串类型和文本类型 1.5 日期与时间类型 1.6 二进制类型 2. 有代表的类型测试 2.1 tinyint类型 2.2 bit类型 2.3 float类型 2.4 decimal类型 2.5 char和varchar类型 2.6 …

Java on VS Code 2024年1月更新|JDK 21支持!测试覆盖率功能最新体验!

作者:Nick Zhu - Senior Program Manager, Developer Division At Microsoft 排版:Alan Wang 大家好,欢迎来到 Visual Studio Code for Java 2024年的第一期更新!提前祝愿大家春节快乐!在本博客中,我们将有…

FPS游戏穿模最强解决方案!开发一款FPS游戏射击游戏真的太简单!

FPS游戏穿模最强解决方案!开发一款FPS游戏射击游戏真的太简单! 2001年,FPS游戏老大哥《CS》横空出世,迅速在国内外掀起了一波FPS游戏的热潮,随后《CF穿越火线》在国内上线,一举拿下“玩家最喜爱的十大网络…

跑路页面HTML源码

简单的HTMLJSCSS,记事本修改内容,喜欢的朋友可以下载 https://download.csdn.net/download/huayula/88811984

外汇天眼:寻找外汇交易高手,你敢应战么?

在充满变数的金融市场中,外汇市场一直是交易者们追逐高回报的投资之地,而在这个市场上交易高手们的价值愈发明显。那么作为金融领域的启明星,你是否已经准备好了展示自己的交易技能呢?如果你时刻准备着,想和来自全球的…

WPF控件-ItemsControl

介绍 ItemsControl是用于展示一组项的控件。我们常见的列表&#xff08;ListBox&#xff09;、数据表格&#xff08;DataGrid&#xff09;等都是继承自ItemsControl。可用于自定义样式展示各种批量的数据集合。 常见使用示例&#xff1a; <ItemsControl ItemsSource"…

【Java程序设计】【C00245】基于Springboot的家政服务管理平台(有论文)

基于Springboot的家政服务管理平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的家政服务管理平台 本系统分为前台模块、管理员功能模块、用户功能模块以及服务人员功能模块。 前台模块&#xff1a;系统首页的…

Qt PCL学习(一):环境搭建

参考 (QT配置pcl)PCL1.12.1QT5.15.2vs2019cmake3.22.4vtk9.1.0visual studio2019Qt5.15.2PCL1.12.1vtk9.1.0cmake3.22.2 本博客用到的所有资源 版本一览&#xff1a;Visual Studio 2019 Qt 5.15.2 PCL 1.12.1 VTK 9.1.0https://pan.baidu.com/s/1xW7xCdR5QzgS1_d1NeIZpQ?pw…

SpringBoot实战第二天

今日战报 继续完善用户相关接口开发&#xff1a; 1.完成获取用户信息功能 2.完成更新用户信息功能 3.完成更新用户头像功能 4.完成更新用户密码功能 获取用户信息 接口文档 如接口文档所示&#xff0c;我们需要做的就是从header中的Authorization中读取token&#xff0c;解码…

Nginx: a little source code

Nginx被称为C程序员必学的源码之一&#xff0c;我觉得名副其实&#xff0c;它的事件机制、内存管理、进程通信都可以说是顶级实践&#xff0c;非常值得学习。 Nginx源码比较多&#xff0c;本文只看几个重要的模块&#xff0c;更详细的内容请参考《深入理解nginx模块开发与架构》…

单片机学习笔记---按键控制LED流水灯模式定时器时钟

目录 代码讲解 初始化函数 1.定时器部分的配置步骤 第一步&#xff0c;对TMOD的赋值 第二步&#xff0c;给TF0赋值 第三步&#xff0c;给TR0赋值开启定时器 第四步&#xff0c;给TL0和TH0赋初值 2.中断系统部分的配置步骤 第一步&#xff0c;给ET0赋值 第二步&#x…