预测股票价格是一项具有挑战性的任务,已引起研究人员和从业者的广泛关注。随着深度学习技术的出现,已经提出了许多模型来解决这个问题。其中一个模型是 Transformer,它在许多自然语言处理任务中取得了最先进的结果。在这篇博文中,我们将向您介绍一个示例,该示例使用 PyTorch Transformer 根据前 10 天预测未来 5 天的股票价格。
首先,让我们导入必要的库:
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
产生训练模型的数据
对于这个例子,我们将生成一些虚拟股票价格数据:
num_days = 200
stock_prices = np.random.rand(num_days) * 100
预处理数据
我们将为我们的模型准备输入和目标序列:
input_seq_len = 10
output_seq_len = 5
num_samples = num_days - input_seq_len - output_seq_len + 1src_data = torch.tensor([stock_prices[i:i+input_seq_len] for i in range(num_samples)]).unsqueeze(-1).float()
tgt_data = torch.tensor([stock_prices[i+input_seq_len:i+input_seq_len+output_seq_len] for i in range(num_samples)]).unsqueeze(-1).float()
创建自定义转换器模型
我们将创建一个用于股票价格预测的自定义 Transformer 模型:
class StockPriceTransformer(nn.Module):def __init__(self, d_model, nhead, num_layers, dropout):super(StockPriceTransformer, self).__init__()self.input_linear = nn.Linear(1, d_model)self.transformer = nn.Transformer(d_model, nhead, num_layers, dropout=dropout)self.output_linear = nn.Linear(d_model, 1)def forward(self, src, tgt):src = self.input_linear(src)tgt = self.input_linear(tgt)output = self.transformer(src, tgt)output = self.output_linear(output)return outputd_model = 64
nhead = 4
num_layers = 2
dropout = 0.1model = StockPriceTransformer(d_model, nhead, num_layers, dropout=dropout)
训练模型
我们将设置训练参数、损失函数和优化器:
epochs = 100
lr = 0.001
batch_size = 16criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=lr)
现在,我们将使用训练循环训练模型:
for epoch in range(epochs):for i in range(0, num_samples, batch_size):src_batch = src_data[i:i+batch_size].transpose(0, 1)tgt_batch = tgt_data[i:i+batch_size].transpose(0, 1)optimizer.zero_grad()output = model(src_batch, tgt_batch[:-1])loss = criterion(output, tgt_batch[1:])loss.backward()optimizer.step()print(f"Epoch {epoch+1}/{epochs}, Loss: {loss.item()}")
预测未来 5 天的股票价格
最后,我们将使用经过训练的模型预测未来 5 天的股票价格:
src = torch.tensor(stock_prices[-input_seq_len:]).unsqueeze(-1).unsqueeze(1).float()
tgt = torch.zeros(output_seq_len, 1, 1)with torch.no_grad():for i in range(output_seq_len):prediction = model(src, tgt[:i+1])tgt[i] = prediction[-1]output = tgt.squeeze().tolist()
print("Next 5 days of stock prices:", output)
在这个预测循环中,我们使用自回归解码方法 ( model(src, tgt[:i+1])) 逐步生成输出序列,因为每一步的输出都取决于之前的输出。
结论
在这篇博文中,我们演示了如何使用 PyTorch Transformer 模型预测股票价格。我们生成虚拟股价数据,对其进行预处理,创建自定义 Transformer 模型,训练模型,并预测未来 5 天的股价。此示例可作为使用深度学习技术开发更复杂的股票价格预测模型的起点。
代码下载
见链接底部
AI好书推荐
AI日新月异,但是万丈高楼拔地起,离不开良好的基础。您是否有兴趣了解人工智能的原理和实践? 不要再观望! 我们关于 AI 原则和实践的书是任何想要深入了解 AI 世界的人的完美资源。 由该领域的领先专家撰写,这本综合指南涵盖了从机器学习的基础知识到构建智能系统的高级技术的所有内容。 无论您是初学者还是经验丰富的 AI 从业者,本书都能满足您的需求。 那为什么还要等呢?
人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典
北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理