使用注意力机制的 LSTM 彻底改变时间序列预测

news2024/11/26 4:33:11

目录

  • 一、说明
  • 二、LSTM 和注意力机制简介
  • 三、为什么要将 LSTM 与时间序列注意力相结合?
  • 四、模型架构
    • 训练与评估
  • 五、验证
  • 六、计算指标
  • 七、结论

一、说明

   在时间序列预测领域,对更准确、更高效的模型的追求始终存在。深度学习的应用为该领域的重大进步铺平了道路,其中,长短期记忆 (LSTM) 网络与注意力机制的集成尤其具有革命性。本文深入探讨了一个实际案例研究:使用这种复杂的架构预测 Apple Inc. (AAPL) 的股价。

   重要的是要承认这些想法的起源:韦恩·格雷。Wayne 是一名金融分析师,在人工智能方面拥有专业知识。在不透露太多的情况下,韦恩很棒,他的想法更上一层楼。这篇文章试图解释我们的对话,只是他研究的开始!

二、LSTM 和注意力机制简介

   LSTM 网络是一种特殊的递归神经网络 (RNN),能够学习数据序列中的长期依赖关系。它们被广泛用于顺序数据,并且是时间序列分析中许多预测建模成功的基石。注意力机制最初是为自然语言处理任务开发的,它通过允许模型在进行预测时专注于输入序列的特定部分来增强 LSTM,类似于人类注意力的工作方式。

三、为什么要将 LSTM 与时间序列注意力相结合?

   金融市场的动态性质使得股价预测成为一项具有挑战性的任务。传统的 LSTM 尽管能够捕获时间依赖性,但可能会难以应对股价变动的噪音和波动。注意力机制通过为输入数据的不同时间步长提供加权重要性来解决这个问题,使模型能够优先考虑更相关的信息并提高其预测性能。

   案例研究:预测 AAPL 股价
   在我们的实验中,我们利用了AAPL四年的历史股价,使用“收盘价”进行预测。首先对数据进行归一化以帮助训练过程,然后输入到我们的 LSTM with Attention 模型中。

四、模型架构

   我们的模型包括一个 LSTM 层,然后是一个注意力层和一个全连接层来产生输出。注意力层计算注意力权重并将其应用于 LSTM 的输出,生成一个上下文向量,作为最终预测的输入。

# Import necessary libraries
import yfinance as yf
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import MinMaxScaler

# Download Apple Inc. stock data
aapl_data = yf.download('AAPL', start='2020-01-01', end='2024-03-01')

# Use the 'Close' price for prediction
close_prices = aapl_data['Close'].values

# Normalize the data
scaler = MinMaxScaler(feature_range=(0, 1))
close_prices_scaled = scaler.fit_transform(close_prices.reshape(-1, 1))

# Prepare the dataset
X = close_prices_scaled[:-1]
y = close_prices_scaled[1:]

# Reshape for LSTM
X = X.reshape(-1, 1, 1)
y = y.reshape(-1, 1)

# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Convert to PyTorch tensors
X_train_tensor = torch.tensor(X_train, dtype=torch.float32)
y_train_tensor = torch.tensor(y_train, dtype=torch.float32)
X_test_tensor = torch.tensor(X_test, dtype=torch.float32)
y_test_tensor = torch.tensor(y_test, dtype=torch.float32)

# LSTM with Attention Mechanism
class LSTMAttention(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim=1, num_layers=1):
        super(LSTMAttention, self).__init__()
        self.hidden_dim = hidden_dim
        self.num_layers = num_layers
        self.lstm = nn.LSTM(input_dim, hidden_dim, num_layers, batch_first=True)
        self.attention = nn.Linear(hidden_dim, 1)
        self.fc = nn.Linear(hidden_dim, output_dim)

    def forward(self, x):
        lstm_out, _ = self.lstm(x)
        attention_weights = torch.softmax(self.attention(lstm_out).squeeze(-1), dim=-1)
        context_vector = torch.sum(lstm_out * attention_weights.unsqueeze(-1), dim=1)
        out = self.fc(context_vector)
        return out

# Instantiate and train the model
model = LSTMAttention(input_dim=1, hidden_dim=50)
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

# Training loop
epochs = 100
for epoch in range(epochs):
    model.train()
    optimizer.zero_grad()
    output = model(X_train_tensor)
    loss = criterion(output, y_train_tensor)
    loss.backward()
    optimizer.step()

    if epoch % 10 == 0:
        model.eval()
        test_pred = model(X_test_tensor)
        test_loss = criterion(test_pred, y_test_tensor)
        print(f'Epoch {epoch}, Loss: {loss.item()}, Test Loss: {test_loss.item()}')

# Predictions
model.eval()
predictions = model(X_test_tensor).detach().numpy()
predictions_actual = scaler.inverse_transform(predictions)

# Plotting
plt.figure(figsize=(15, 5))
plt.plot(scaler.inverse_transform(y_test), label='Actual')
plt.plot(predictions_actual, label='Predicted')
plt.title('AAPL Stock Price Prediction')
plt.legend()
plt.show()

# Calculate MSE
mse = mean_squared_error(scaler.inverse_transform(y_test), predictions_actual)
print(f'Mean Squared Error: {mse}')

训练与评估

   该模型经过了 100 多个时期的训练,显示训练集和测试集的均方误差 (MSE) 持续下降。当与实际值进行对比时,最终预测表明该模型能够密切跟踪实际价格走势。
在这里插入图片描述
在这里插入图片描述

五、验证

# 第 1 步:获取下个月的额外数据
additional_data = yf。download('AAPL', start='2023-03-02', end='2023-03-29')

# 第 2 步:预处理新数据
new_close_prices = additional_data['Close'].values
new_close_prices_scaled = scaler.变换(new_close_prices。reshape(-11))

# 准备用于预测
的新数据集 X_new = new_close_prices_scaled[-1]
y_new_actual = new_close_prices_scaled[1]

X_new = X_new。重塑(-111)
y_new_actual = y_new_actual。reshape(-11)

# 转换为 PyTorch 张量
X_new_tensor = torch。tensor(X_new, dtype=torch.float32)
y_new_actual_tensor = 火炬。tensor(y_new_actual, dtype=torch.float32)

# 第 3 步:制作预测
模型。eval()
new_predictions = model(X_new_tensor)。detach() 中。numpy()
new_predictions_actual = 缩放器。inverse_transform(new_predictions)

# 第 4 步:评估模型
plt.图(figsize=155))
plt.plot(缩放器。inverse_transform(y_new_actual), label='实际')
plt。plot(new_predictions_actual, label='Predicted')
plt。title('AAPL 新月股价预测')
plt.legend()
plt.show()

六、计算指标

new_mse = mean_squared_error(scaler.inverse_transform(y_new_actual), new_predictions_actual)
print(f'新均方误差:{new_mse}')

结果分析
   第一个图显示测试集的预测价格与实际价格。这一时期的均方误差约为9.87,表明与看不见的数据有很强的拟合度。

   为了进行可靠的验证,我们还预测了下个月的价格:

   随后一段时间的 MSE 约为 5.63,这令人印象深刻,展示了该模型的泛化能力。
在这里插入图片描述

七、结论

   事实证明,LSTM 与 Attention 机制相结合,是处理股票价格等时间序列数据的强大架构。它不仅捕捉了时间模式,还辨别了对未来价值产生重大影响的关键时刻。虽然这个模型代表了向前迈出的一大步,但金融市场的波动性确保了对更精细模型的探索仍在继续。然而,我们的AAPL股价预测案例研究的结果是有希望的,并为未来的探索奠定了坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1580211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【golang】动态生成微信小程序二维码实战下:golang 生成 小程序二维码图片 并通过s3协议上传到对象存储桶 | 腾讯云 cos

项目背景 在自研的系统,需要实现类似草料二维码的功能 将我们自己的小程序,通过代码生成相想要的小程序二维码 代码已经上传到 Github 需要的朋友可以自取 https://github.com/ctra-wang/wechat-mini-qrcode 一、生成Qrcode并提交到对象存储 通过源生A…

中颖51芯片学习4. 可编程计数器阵列PCA0

中颖51芯片学习4. 可编程计数器阵列PCA0 一、PCA介绍1. PCA简介2. SH79F9476的PCA0特性3. PCA0 功能4. 时钟5. PCA0原理框图6. 工作方式 二、PCA0寄存器1. PCA0标志寄存器2. PCA使能寄存器3. PCA0方式寄存器4. P0CPMn PCA捕捉/比较寄存器5. P0FORCE强制输出控制寄存器6. PCA0计…

《极域多媒体教室互动管理系统软件》控制方法大全

前言及背景: 当我坐在电脑前,打开它,点开谷歌,刚刚想打开百度,突然闪出来了: 该网页已被阻止!!! 正文: 1.极域控制原理: 好…

使用EZDML自动生成测试数据

项目场景: 项目开发时,新创建的表需要增加一部分测试数据用于简单的功能测试。 问题描述 无论使用代码还是使用plsql自带的数据生成工具都感觉有点麻烦,我只想点点点就能生成数据。 解决方案: 提示:这里填写该问题的具体解决方案: 使用 EZDML 可以方便的生成测试数据。…

吴恩达深度学习 (week1,2)

文章目录 1、神经网络监督学习2、深度学习兴起原因3、深度学习二元分类4、深度学习Logistic 回归5、Logistic 回归损失函数6、深度学习梯度下降法7、深度学习向量法8、Python 中的广播9、上述学习总结10、大作业实现:rocket::rocket:(1)训练初始数据&…

如何开始用 C++ 写一个光栅化渲染器?

光栅化渲染器是计算机图形学中最基础且广泛应用的一种渲染技术,它将三维模型转化为二维图像。下面我们将逐步介绍如何使用C语言从零开始构建一个简单的光栅化渲染器。 一、理解光栅化渲染原理 光栅化是一种将几何数据(如点、线、三角形)转换…

一文详解手机IP地址如何改变

在互联网时代,手机的IP地址扮演着至关重要的角色。它不仅是手机在网络中的标识,还关系到手机的网络连接、隐私保护以及访问权限等方面。然而,在某些情况下,我们可能需要改变手机的IP地址,以满足特定的需求或解决网络问…

8×8点阵数码管显示驱动/大电流数码管驱动IC-VK16K33C SOP20

产品品牌:永嘉微电/VINKA 产品型号:VK16K33C 封装形式:SOP20 概述 VK16K33C是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有数据锁 存器、键盘扫描、LED 驱动模块等电路。数据通过I2C通讯接口与MCU通信。SE…

腾讯再次回归电商,视频号小店真的要起飞了?

大家好,我是电商小布。 在互联网快速发展的现状下,各个平台都开始加入到电商这一行。 就连之前在电商上栽过跟头的腾讯,都再次回归电商,推出了视频号小店这个项目。 视频号小店背靠着视频号平台,结合当前最热的电商…

数字中国_智慧公厕

在面向未来构建城市竞争新优势、推动城市治理现代化的进程中,推进城市智慧化发展、数字化转型显得尤为重要。作为一种新形态的信息化公共厕所,智慧公厕扮演着举足轻重的角色,对于智慧城市和智慧乡村的发展至关重要,也是城市信息化…

如何加密VM虚拟机

参考官方文档:加密虚拟机 (vmware.com) 选择该虚拟机,然后选择虚拟机 > 设置。在选项选项卡中,选择访问控制。单击加密。选择适当的加密类型。单击加密,键入加密密码,然后单击加密。 要获得虚拟机的访问权限&#…

C++ primer 第十八章

C语言的三大特性:异常处理、命名空间、多重继承。 1.异常处理 异常处理机制允许我们能够将问题的检测与解决过程分离开来。 1.1、抛出异常 在C语言中,我们通过抛出一条表达式来引发一个异常。 当执行一个throw时,程序的控制权从throw转移…

linux 开机自启动

方式1—依赖桌面启动,一般适用与UI相关程序 1、创建运行脚本,以管理员放方式运行,加入密码 vim runapp.sh #!/bin/bash cd /home/nvidia/test echo ‘passcode’ | sudo -S ./testapp 2、终端输入 gnome-session-properties 3、在com…

【超简单】基于PaddleSpeech搭建个人语音听写服务

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…

跨框架探索:React Redux 和 Vuex 对比分析快速掌握React Redux

React Redux 和 Vuex 都是前端状态管理库,分别用于 React 和 Vue.js 框架。 它们都提供了一套规范的状态管理机制,帮助开发者更好地组织和管理应用状态。下面是它们的一些异同点: 相同点: 中心化状态管理:两者都提…

OSCP靶场--Nagoya

OSCP靶场–Nagoya 考点 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.214.21 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-02 08:52 EDT Nmap scan report for 192.168.214.21 Host is up (0.38s latency).…

一文介绍CNN/RNN/GAN/Transformer等架构 !!

文章目录 前言 1、卷积神经网络(CNN) 2、循环神经网络(RNN) 3、生成对抗网络(GAN) 4、Transformer 架构 5、Encoder-Decoder架构 前言 本文旨在介绍深度学习架构,包括卷积神经网络CNN、循环神经…

K8S node节点配置

1.开始操作之前要先关闭防火墙,SELinux,swap分区 关闭防火墙 sudo systemctl stop firewalld关闭SELinux sudo setenforce 0 # 临时关闭 sudo sed -i s/^SELINUXenforcing$/SELINUXper…

应用Ribo-seq技术量化tRNA对乳腺癌细胞转移的调控

技术简介 Ribo-seq,又称为Ribosome Profiling或者翻译组测序,能够对与核糖体结合并正在被翻译的约30 nt的mRNA片段进行测序,详细检测体内的翻译状态,Ribo-seq是连接转录组学与蛋白质组学之间的桥梁。该技术可构建癌细胞全基因组水…

为什么PCB板上需要晶振

PCB板,即印刷电路板,是现代电子设备中不可或缺的组成部分。它的基本功能是提供电子元件之间的电气连接,使电子元件能够正确、高效地工作。然而,为了使电子设备能够正常工作,PCB板上的电子元件需要遵循一定的时序和频率…