pytorch 实现gru_GRU for Time Series in Pytorch–Pytorch实现时间序列分析 | 文艺数学君

本文介绍如何使用PyTorch实现GRU进行时间序列分析和预测。通过创建一个7天滑动窗口的数据生成器,用以训练和测试模型。在AR(5)数据上训练的GRU网络在约300个epoch后达到良好预测效果。
摘要由CSDN通过智能技术生成

摘要这一篇文章会介绍使用RNN来完成时间序列的分析,更准确的说是时间序列的预测。本篇内容会介绍使用GRU来预测AR(5)的数据。

简介

这一篇文章,会完成使用RNN, 更具体的说是使用GRU来实现时间序列的分析, 用来做预测. 最终的效果如下, 后面会有每一步的具体步骤。

主要参考的文章为下面两篇文章 :

数据输入

在处理时间序列数据的时候,对于输入我们有两种处理的办法。我们会将数据分为chunk。

如图一, 比如我们使用前6天预测第七天, 再使用前七天预测第八天, 以此类推.

如图二, 比如我们使用0-6天预测第七天, 使用1-7天预测第八天, 以此类推.

在我们这篇文章,我们会采取使用图2的形式. 我们会以7天作为一个阶段, 使用七天的数据预测第八天.

In our case study, I will use samples consisting of 7-days sliding windows with step size equal to 1, used to predict the next value (1-step ahead forecast).

下面我们看一下具体的实现。这里一段内容参考自上面的链接二。

具体的实现

导入所需要的库

import torch

import torch.nn as nn

import torch.optim as optim

import numpy as np

from sklearn.model_selection import train_test_split

import matplotlib.pyplot as plt

Generating Autoregressive data for experiments(生成所需要的数据)

这里的代码来自上面的链接一, 我在代码注释中也写了来源, 这个数据我没仔细看, 后面就是直接使用了。

# 代码来源 : http://www.jessicayung.com/generating-autoregressive-data-for-experiments/

# 代码来源 : https://github.com/jessicayung/blog-code-snippets

class TimeSeriesData:

def __init__(self, num_datapoints, test_size=0.2, max_t=20, num_prev=1,

noise_var=1):

"""

Template class for generating time series data.

:param test_size: in (0,1), data to be used in test set as a fraction of all data generated.

"""

self.num_datapoints = num_datapoints

self.test_size = test_size

self.num_prev = num_prev

self.max_t = max_t

self.data = None

self.noise_var = noise_var

self.y = np.zeros(num_datapoints + num_prev*4) # TODO: check this

self.bayes_preds = np.copycopy(self.y)

# Generate data and reshape data

self.create_data()

# Split into training and test sets

self.train_test_split()

def create_data(self):

self.generate_data()

self.reshape_data()

def generate_data(self):

"""Generates data in self.y, may take as implicit input timesteps self.t.

May also gener

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值