pytorch框架下时序预测中LSTM数据集构建

   在pytorch中LSTM的输入格式为(batch_size,  seq_len, input_size),seq_len原意是指LSTM处理翻译问题中每条句子序列的长度,在时序数据处理中对应着一条样本中包含前多少时刻的样本数据,具体数据处理的代码如下:
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from torch.utils.data import Dataset
import pandas as pd
import numpy as np
# 构建自己的数据集,输入为自变量x,输出为因变量y
class MyDataSet(Dataset):
    def __init__(self, x, y):
        super(MyDataSet, self).__init__()
        self.x = x
        self.y = y


    def __len__(self):
        return self.x.shape[0]

    def __getitem__(self, idx):
        return self.x[idx], self.y[idx]

# 构建(sanmple_num, seq_len, input_size)数据格式的数据,输入为excel文件
# filepath根据自己的文件所在位置对应更改
def data_loader(filepath = 'data/dataset.xlsx',seq_len = 6,train_rate = 0.7):
  """Loads Google stock data.

  Args:
    - train_rate: the ratio between training and testing sets
    - seq_len: sequence length

  Returns:
    - dataset_train: training data
    - dataset_val: valid data
    - dataset_test: testing data
  """

  # Load data
  # 跳过文件第一列时间日期,取出数据
  ori_data = pd.read_excel(filepath).iloc[:,1:].values

  # Normalization
  # 两种处理数据的方式:归一化/标准化
  scaler = MinMaxScaler(feature_range=(0,1))
  norm_data = scaler.fit_transform(ori_data)
  # std = StandardScaler()
  # norm_data = std.fit_transform(ori_data)
  # norm_data = ori_data
  # Build dataset
  data_x = []
  data_y = []

  for i in range(0, len(norm_data[:,0]) - seq_len):
    # Previous seq_len data as features
    temp_x = norm_data[i:i + seq_len,:-1]
    temp_y = norm_data[i:i + seq_len,-1:]
    # Values at next time point as labels
    data_x = data_x + [temp_x]
    data_y = data_y + [temp_y]

  data_x = np.asarray(data_x).astype(np.float32)
  data_y = np.asarray(data_y).astype(np.float32)

  # Train valid test Division

  train_x, valid_x, test_x = data_x[:int(0.6 * len(norm_data))], data_x[int(0.6 * len(norm_data)):int(0.8 * len(norm_data))], data_x[int(0.8 * len(norm_data)):]
  train_y, valid_y, test_y = data_y[:int(0.6 * len(norm_data))], data_y[int(0.6 * len(norm_data)):int(0.8 * len(norm_data))], data_y[int(0.8 * len(norm_data)):]

  dataset_train,dataset_val,dataset_test = MyDataSet(train_x,train_y),MyDataSet(valid_x,valid_y),MyDataSet(test_x,test_y)

  return dataset_train,  dataset_val, dataset_test

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch是一个流行的深度学习框架,其了许多用于时序预测的模型,其包括LSTM(长短期记忆)神经网络。LSTM是一种递归神经网络,能够处理和预测时序数据,并且在一些应用表现优异。 在PyTorch使用LSTM进行时序预测的步骤如下: 1. 数据预处理:首先,需要对时序数据进行预处理。这包括加载和归一化数据,以及将数据划分为输入序列和目标序列。输入序列是用于预测的历史数据,而目标序列是要预测的未来数据。 2. 模型定义:接下来,需要定义LSTM模型。可以使用PyTorch的nn.LSTM类来创建一个LSTM层。通常,LSTM需要指定输入维度、隐藏层维度和输出维度等参数。 3. 模型训练:在训练之前,需要定义损失函数和优化器。通常,可以使用均方误差(MSE)作为损失函数,用于衡量预测值与真实值之间的差距。对于优化器,可以选择Adam等常见的优化算法。然后,通过迭代训练数据,逐渐调整模型的权重,找到最佳的参数配置。 4. 模型预测:在模型训练完成后,可以使用它来进行时序预测。将输入序列输入到训练好的模型,可以得到对未来数据的预测结果。 5. 评估模型:最后,需要评估模型的性能。可以使用各种指标,如均方根误差(RMSE)或平均绝对百分比误差(MAPE)等,来评估预测结果与真实数据之间的误差。 PyTorch提供了许多灵活的工具和函数,使得使用LSTM进行时序预测变得简单。通过适当地配置和训练模型,可以实现准确且可靠的时序预测

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值