Python中LSTM回归神经网络时间序列预测详情

yizhihongxing

以下是Python中LSTM回归神经网络时间序列预测的完整攻略,包括两个示例。

LSTM回归神经网络时间序列预测的基本步骤

LSTM回归神经网络时间序预测的基本步骤如下:

  1. 导入必要的库
import numpy as
import pandas as pd
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
  1. 准备数据

准备时间序列数据,将其转换为适合LSTM模的格式。

class TimeSeriesDataset(Dataset):
    def __init__(self, data, seq_len):
        self.data = data
        self.seq_len = seq_len

    def __len__(self):
        return len(self.data) - self.seq_len

    def __getitem__(self, idx):
        x = self.data[idx:idx+self.seq_len]
        y = self.data[idx+self.seq_len]
        return x, y

# 加载数据
data = pd.read_csv('data.csv', header=None)
data = data.values.astype('float32')

# 划分训练集和测试集
train_size int(len(data) * 0.8)
train_data = data[:train_size]
test_data = data[train_size:]

# 标准化数据
mean = train_data.mean(axis=0)
std = train_data.std(axis=0)
train_data = (train_data - mean) / std
test_data = (test_data - mean) / std

# 创建数据集
seq_len = 10
train_dataset = TimeSeriesDataset(train_data, seq_len)
test_dataset = TimeSeriesDataset(test_data, seq_len)

# 创建数据加载器
batch_size = 32
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
  1. 定义模型

定义LSTM模型。

class LSTM(nn.Module):
    def __init__(self, input_size,_size, num_layers, output_size):
        super(LSTM, self).__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        out, _ = self.lstm(x)
        out = out[:, -1, :]
        out = self.fc(out)
        return out
  1. 训练模型

训练LSTM模型。

# 定义模型
input_size = 1
hidden_size = 32
num_layers 2
output_size = 1
model = LSTM(input_size, hidden_size, num_layers, output_size)

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

# 训练模型
num_epochs = 100
for epoch in range(num_epochs):
    for i, (x, y) in enumerate(train_loader):
        # 前向传播
        x = x.unsqueeze(-1)
        y_pred = model(x)

        # 计算损失
        loss = criterion(y_pred, y)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    # 打印损失
    print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
  1. 测试模型

测试LSTM模型。

# 测试模型
model.eval()
with torch.no_grad():
    y_pred = []
    for x, y in test_loader:
        x = x.unsqueeze(-1)
        y_pred.append(model(x).squeeze().numpy())
    y_pred = np.concatenate(y_pred)

# 反标准化数据
y_pred = y_pred * std[-1] + mean[-1]
y_true = test_data[seq_len:, -1] * std[-1] + mean[-1]

# 绘制预测结果
plt.plot(y_true, label='True')
plt.plot(y_pred, label='Predicted')
plt.legend()
plt.show()

以上是Python中LSTM回归神经网络时间序列预测的完整攻略,通过以上步骤和示例,我们可以轻松地使用LSTM模型进行时间序列预测。

示例一:使用LSTM模型预测股票价格

以下是使用LSTM模型预测股票价格的示例代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader

# 加载数据
data = pd.read_csv('stock.csv')
data = data['Close'].values.astype('float32')

# 划分训练集和测试集
train_size = int(len(data) * 0.8)
train_data = data[:train_size]
test_data = data[train_size:]

# 标准化数据
mean = train_data.mean()
std = train_data.std()
train_data = (train_data - mean) / std
test_data = (test_data - mean) / std

# 创建数据集
seq_len = 10
train_dataset = TimeSeriesDataset(train_data, seq_len)
test_dataset = TimeSeriesDataset(test_data, seq_len)

# 创建数据加载器
batch_size = 32
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

# 定义模型
input_size = 1
hidden_size = 32
num_layers = 2
output_size = 1
model = LSTM(input_size, hidden_size, num_layers, output_size)

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

# 训练模型
num_epochs = 100
for epoch in range(num_epochs):
    for i, (x, y) in enumerate(train_loader):
        # 前向传播
        x = x.unsqueeze(-1)
        y_pred = model(x)

        # 计算损失
        loss = criterion(y_pred, y)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    # 打印损失
    print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

# 测试模型
model.eval()
with torch.no_grad():
    y_pred = []
    for x, y in test_loader:
        x = x.unsqueeze(-1)
        y_pred.append(model(x).squeeze().numpy())
    y_pred = np.concatenate(y_pred)

# 反标准化数据
y_pred = y_pred * std + mean
y_true = test_data[seq_len:] * std + mean

# 绘制预测结果
plt.plot(y, label='True')
plt.plot(y_pred, label='Predicted')
plt.legend()
plt.show()

上面的代码使用LSTM模型预测股票价格。

示例二:使用LSTM模型预测气温

以下使用LSTM模型预测气温的示例代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader

# 加载数据
data = pd.read_csv('temperature.csv')
data = data['Temperature'].values.astype('float32')

# 划分训练集和测试集
train_size = int(len(data) * 0.8)
train_data = data[:train_size]
test_data = data[train_size:]

# 标准化数据
mean = train_data.mean()
std = train_data.std()
train_data = (train_data - mean) / std
test_data = (test_data - mean) / std

# 创建数据集
seq_len = 10
train_dataset = TimeSeriesDataset(train_data, seq_len)
test_dataset = TimeSeriesDataset(test_data, seq_len)

# 创建数据加载器
batch_size = 32
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

# 定义模型
input_size = 1
hidden_size = 32
num_layers = 2
output_size = 1
model LSTM(input_size, hidden_size, num_layers, output_size)

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

# 训练模型
num_epochs = 
for epoch in range(num_epochs):
    for i, (x, y) in enumerate(train_loader):
        # 前向传播
        x = x.unsqueeze(-1)
        y_pred = model(x)

        # 计算损失
        loss = criterion(y_pred, y)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    # 打印损失
    print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

# 测试模型
model.eval()
with torch.no_grad():
    y_pred = []
    for x, y in test_loader:
        x = x.unsqueeze(-1)
        y_pred.append(model(x).squeeze().numpy())
    y_pred = np.concatenate(y_pred)

# 反标准化数据
y_pred = y_pred * std + mean
y_true = test_data[seq_len:] * std + mean

# 绘制预测结果
plt.plot(y_true, label='True')
plt.plot(y_pred label='Predicted')
plt.legend()
plt.show()

上面的代码使用LSTM模型预测气温。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中LSTM回归神经网络时间序列预测详情 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 使用Python实现图像融合及加法运算

    图像融合和加法运算是图像处理中常见的操作。Python提供了许多图像处理库,如Pillow、OpenCV和Scikit-image等,可以用于实现图像融合和加法运算。本文将介绍如何使用Python和Pillow库现图像融合和加法运算,并提供两个示例。 示例一:使用Python和Pillow实现图像融合 要实现图像融合,可以使用以下步骤: 导入必要的库 fro…

    python 2023年5月14日
    00
  • python numpy.ndarray中如何将数据转为int型

    以下是Python NumPy中如何将数据转为int型的攻略: Python NumPy中如何将数据转为int型 在NumPy中,可以使用astype()函数将数据转换为int型。以下是一些实现方法: 将float型数据转为int型 可以使用astype()函数将float型数据转为int型。以下是一个示例: import numpy as np a = n…

    python 2023年5月14日
    00
  • python将txt等文件中的数据读为numpy数组的方法

    以下是关于“Python将txt等文件中的数据读为numpy数组的方法”的完整攻略。 将txt文件中的数据读为numpy数组 在Python中,可以使用numpy.loadtxt()函数将txt文件中数据读为numpy数组。该函数的语法如下: numpy.loadtxt(fname, dtype=< ‘float’>, comments=’#’,…

    python 2023年5月14日
    00
  • 纯numpy数值微分法实现手写数字识别

    纯numpy数值微分法实现手写数字识别的完整攻略如下: 1. 数据集准备 首先,我们需要准备手写数字的数据集。可以使用MNIST数据集,该数据集包含60,000个训练图像和10,000个测试图像,每个图像都是28×28像素的灰度图像。可以使用numpy的load函数加载数据集。 import numpy as np # 加载MNIST数据集 train_da…

    python 2023年5月14日
    00
  • 针对Pandas的总结以及数据读取_pd.read_csv()的使用详解

    针对Pandas的总结以及数据读取_pd.read_csv()的使用详解 Pandas是一个基于NumPy的Python数据分析库,它提供了高效的数据结构和数据分析工具,可以帮助我们快速地处理和分析数据。本攻略将详细讲解Pandas的基本概念和常用操作,并提供两个数据读取的示例。 Pandas基本概念 Pandas中最常用的两个数据结构是Series和Dat…

    python 2023年5月14日
    00
  • Pyinstaller打包Pytorch框架所遇到的问题

    PyInstaller是一个用于将Python应用程序打包成独立可执行文件的工具。但是,在打包PyTorch框架时,可能会遇到一些问题。以下是PyInstaller打包PyTorch框架所遇到的问题的完整攻略,包括问题的原因和解决方法,以及示例说明: 问题:打包后的可执行文件无法运行,提示缺少DLL文件。 原因:PyTorch框架依赖于一些动态链接库文件,这…

    python 2023年5月14日
    00
  • 取numpy数组的某几行某几列方法

    以下是关于取NumPy数组的某几行某几列方法的攻略: 取NumPy数组的某几行某几列方法 在NumPy中,可以使用切片(slice)和索引(index)来取NumPy数组的某几行某几列。以下是一些常用的方法: 使用切片(slice)方法 切片(slice)方法可以取NumPy数组的某几行某几列。以下是一个示例: import numpy as np # 生成…

    python 2023年5月14日
    00
  • 详解numpy矩阵的创建与数据类型

    详解NumPy矩阵的创建与数据类型 NumPy是Python中用于科学计算的一个重要库,它提供了高效的多维数组对象和各种派生对象,包括矩阵。本攻略将详细讲解NumPy矩阵的创建与数据类型。 创建NumPy矩阵 NumPy矩阵可以使用numpy.matrix()函数创建。下面是一个创建NumPy矩阵示例: import numpy as np # 创建一个2x…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部