LSTM实战之预测股票
📈 用PyTorch搭建LSTM模型,轻松预测股票价格!🚀
Hey小伙伴们,今天给大家带来一个超级实用的项目教程——如何用PyTorch和LSTM模型来预测股票价格!🌟
🔍 项目背景
我们都知道股市是个风云变幻的地方,而预测股价则是很多投资者梦寐以求的能力。今天,我们就来尝试一下用机器学习的方法来预测股价,让数据说话!
📑 准备工作
首先,我们要准备好开发环境,确保安装了以下Python库:
numpy: 数组处理pandas: 数据处理matplotlib: 数据可视化scikit-learn: 数据预处理torch: 构建LSTM模型
💻 实战演练
1️⃣ 导入库 & 加载数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
import torch
import torch.nn as nn
import torch.optim as optim# 加载数据
df = pd.read_csv('stock_data.csv')
# 只保留收盘价
data = df.filter(['Close'])
# 将数据转换为numpy数组
dataset = data.values
# 归一化数据
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(dataset)
2️⃣ 创建数据集
# 训练集和测试集划分
training_data_len = int(np.ceil(len(dataset) * .8))# 创建训练数据集
def create_dataset(data, time_step=1):X_train, y_train = [], []for i in range(len(data)-time_step-1):X_train.append(data[i:(i+time_step), 0])y_train.append(data[i + time_step, 0])return np.array(X_train), np.array(y_train)time_step = 60
X_train, y_train = create_dataset(scaled_data[:training_data_len], time_step)
X_test, y_test = create_dataset(scaled_data[training_data_len-time_step:], time_step)# 调整数据形状以适应LSTM
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))# 转换为PyTorch张量
X_train = torch.from_numpy(X_train).float()
y_train = torch.from_numpy(y_train).float()
X_test = torch.from_numpy(X_test).float()
y_test = torch.from_numpy(y_test).float()
3️⃣ 构建LSTM模型
class LSTMModel(nn.Module):def __init__(self, input_dim, hidden_dim, layer_dim, output_dim):super(LSTMModel, self).__init__()self.hidden_dim = hidden_dimself.layer_dim = layer_dimself.lstm = nn.LSTM(input_dim, hidden_dim, layer_dim, batch_first=True)self.fc = nn.Linear(hidden_dim, output_dim)def forward(self, x):h0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()c0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()out, (hn, cn) = self.lstm(x, (h0.detach(), c0.detach()))out = self.fc(out[:, -1, :]) return outinput_dim = 1
hidden_dim = 50
layer_dim = 1
output_dim = 1model = LSTMModel(input_dim, hidden_dim, layer_dim, output_dim)# 损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
4️⃣ 训练模型
num_epochs = 100for epoch in range(num_epochs):outputs = model(X_train)optimizer.zero_grad()# 获取损失loss = criterion(outputs, y_train)# 反向传播和优化loss.backward()optimizer.step()if (epoch+1) % 10 == 0:print(f"Epoch: {epoch+1}, Loss: {loss.item()}")
5️⃣ 预测和评估
# 获取模型预测值
train_predictions = model(X_train).detach().numpy()
test_predictions = model(X_test).detach().numpy()# 反归一化预测值
train_predictions = scaler.inverse_transform(train_predictions)
test_predictions = scaler.inverse_transform(test_predictions)# 计算均方根误差(RMSE)
rmse = np.sqrt(np.mean(((test_predictions - y_test.numpy()) ** 2)))
print("Root Mean Squared Error:", rmse)# 可视化结果
train = data[:training_data_len+1]
valid = data[training_data_len+1:]
valid['Predictions'] = test_predictionsplt.figure(figsize=(16,8))
plt.title('Model')
plt.xlabel('Date', fontsize=18)
plt.ylabel('Close Price', fontsize=18)
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])
plt.legend(['Train', 'Val', 'Predictions'], loc='upper right')
plt.show()
📊 结果展示
最后,我们来看看预测结果。可以看到,我们的模型虽然不是完美无缺,但在一定程度上还是能够捕捉到股价的变化趋势。这为投资者提供了非常有价值的信息哦!👀

🏆 结语
今天的分享就到这里啦!希望这篇教程能帮到你,也欢迎小伙伴们在评论区分享你的经验或者遇到的问题,我们一起探讨学习!🌟
如果你在运行过程中遇到任何问题,或者想要了解更多细节,随时可以问我哦!💡
如果你喜欢这篇教程,请给我点个赞哦!💖
也可以收藏,关注我了解更多人工智能知识哦!😉
📌 附录:常见问题解答
-
Q: 如何获取股票数据?
-
A: 你可以从雅虎财经、
tushare等数据源获取股票数据。 -
Q: 为什么我的模型预测效果不好?
-
A: 可能是因为数据不足、模型结构不够复杂或者超参数设置不当。尝试增加数据量、调整模型架构或优化超参数。
-
Q: 我可以在哪里找到更多关于LSTM的知识?
-
A: 有很多在线资源和书籍可以学习LSTM,比如官方文档、博客文章和教程视频。
希望这篇文章对你有所帮助!如果有任何疑问,记得留言哦!👋
#PyTorch #LSTM #股票预测 #时间序列分析 #机器学习 #数据科学 #Python编程
相关文章:
LSTM实战之预测股票
📈 用PyTorch搭建LSTM模型,轻松预测股票价格!🚀 Hey小伙伴们,今天给大家带来一个超级实用的项目教程——如何用PyTorch和LSTM模型来预测股票价格!🌟 🔍 项目背景 我们都知道股市是…...
30-50K|抖音大模型|社招3轮面经
情况介绍:我主要做nlp,也涉及到多模态和强化学习。现在大环境比较差,能投的公司不是很多,比如腾讯,主要还是高级别的,所以腾讯我就没投 抖音一面 1、聊项目。 2、AUC的两种公式是?你能证明这…...
ChatGPT首次被植入人类大脑:帮助残障人士开启对话
马斯克在脑机接口中最强大的竞争对手Synchron有了新的技术进展,他们首次将ChatGPT整合到其脑机系统中,以使瘫痪患者更容易控制他们的数字设备。Synchron凭借其独特的脑机接口(BCI)技术脱颖而出,该技术巧妙地运用了成熟…...
数据结构-常见排序的七大排序
1.排序的概念及其运用 1.1排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录…...
程序员学CFA——财务报告与分析(四)
财务报告与分析(四) 资产负债表资产负债表的构成和格式资产负债表的要素资产负债所有者权益 资产负债表的格式分层的资产负债表基于流动性的资产负债表 资产的计量属性资产负债表科目金融资产持有至到期投资交易性金融资产可供出售金融资产 商誉少数股东…...
【消息队列】kafka如何保证消息不丢失?
👏大家好!我是和风coding,希望我的文章能给你带来帮助! 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝点击 我的主页 还可以看到和风的其他内容噢&#x…...
不同随机数生成的含义
torch.manual_seed(all_args.seed) torch.cuda.manual_seed(all_args.seed) torch.cuda.manual_seed_all(all_args.seed) np.random.seed(all_args.seed) random.seed(all_args.seed) 这几种随机种子设置的含义如下: torch.manual_seed(all_args.seed): 设置PyTor…...
Jar工具完全指南:从入门到精通
Jar工具完全指南:从入门到精通的详尽教程 前言 欢迎来到Jar工具的完全指南!无论你是Java编程的初学者,还是经验丰富的开发者,掌握Jar工具都是必不可少的。Jar(Java Archive)是Java生态系统中的一个核心组…...
前端使用docx-preview展示docx + 后端doc转docx
文章目录 后端 doc 转 docxdcox - preview安装导入使用注意 最近菜鸟刚搞完签字,结果需求就加了,如果合同有附件(.doc.docx),签名就是签到附件里面,没有附件才是签到那个html里面! 这里附件签名…...
Vue3 组件通信
目录 create-vue创建项目 一. 父子通信 1. 父传子 2. 子传父 二. 模版引用(通过ref获取实例对象) 1.基本使用 2.defineExpose 三. 跨层通信 - provide和inject 1. 作用和场景 2. 跨层传递普通数据 3. 跨层传递响应式数据 4. 跨层传递方法 create-vue创建项目 npm ini…...
如何在Ubuntu 14.04上安装、配置和部署Rocket.Chat
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Rocket.Chat 是一个使用 Meteor 构建的开源消息应用程序。它支持视频会议、文件共享、语音消息,具有完整的 API 等功能…...
ISO 26262中的失效率计算:IEC TR 62380-Section 15-Switches and keyboards
目录 概要 1 开关和键盘的分类 2 开关和键盘失效率的计算 2.1 Switches and keyboards 2.1.1 Base失效率 2.1.2 接触数量 2.1.3 温度循环De-rating系数 概要 IEC TR 62380《电子组件、PCBs和设备的可靠性预计通用模型》是涵盖电路、半导体分立器件、光电组件、电阻器、电…...
Linux安全与高级应用(五)深入探讨Linux Shell脚本应用:从基础到高级
文章目录 深入探讨Linux Shell脚本应用:从基础到高级引言一、Shell脚本基础知识1. Shell的作用与分类2. 编写第一个Shell脚本 二、Shell变量的使用1. 变量的类型与定义2. 引号的使用3. 位置变量与预定义变量 三、重定向与管道操作1. 重定向操作2. 管道操作 四、计划…...
Java中等题-解码方法(力扣)
一条包含字母 A-Z 的消息通过以下映射进行了 编码 : "1" -> A "2" -> B ... "25" -> Y "26" -> Z 然而,在 解码 已编码的消息时,你意识到有许多不同的方式来解码,因为有些…...
【Git】git 从入门到实战系列(二)—— Git 介绍以及安装方法
文章目录 一、前言二、git 是什么三、版本控制系统是什么四、本地 vs 集中式 vs 分布式本地版本控制系统集中式版本控制系统分布式版本控制系统 五、安装 git 一、前言 本系列上一篇文章【Git】git 从入门到实战系列(一)—— Git 的诞生,Lin…...
【QT 5 QT 6 构建工具qmake-cmake-和-软件编译器MSVCxxxvs MinGWxxx说明】
【QT 5报错:/xxx/: error: ‘class Ui::frmMain’ has no member named ‘xxx’-和-软件编译器MSVCxxxvs MinGWxxx说明】 1、前言2 、qt 中 Qmake CMake 和 QBS1-qmake2-Cmake3-QBS4-官网一些说法5-各自特点 3、软件编译套件1-Desktop Qt 6.7.2 llvm-mingw 64-bit2-…...
SD卡参数错误:深度解析与数之寻软件恢复实战
一、SD卡参数错误:数据与设备的隐形杀手 在数字化时代,SD卡作为便携存储设备,广泛应用于相机、手机、无人机及各类电子设备中,承载着人们珍贵的照片、视频、文档等重要数据。然而,SD卡在使用过程中,有时会…...
深入理解和应用RabbitMQ的Work Queues模型
文章目录 1. 场景模拟2. 消息发送3. 消息接收4. 测试5. 能者多劳6. 总结 当你在处理消息时,可能会遇到这样的问题:消息的生产速度远远大于消费速度,导致消息堆积。这时候,Work Queues(工作队列)模型就能派上…...
嵌入式面试八股文(三)·野指针产生原因和解决方法、指针函数和函数指针的区别
目录 1. 野指针产生原因和解决方法 1.1 产生的原因 1.1.1 指针未能初始化 1.1.2 指针指向的内存被释放 1.1.3 指针指向的对象被重复释放 1.2 解决方法 1.2.1 初始化指针 1.2.2 指针空置 1.2.3 避免悬挂指针 2. 指针函数和函数指针的区别 2.1 定义不同 2…...
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
在OpenCV中,创建图像时需要指定图像的类型,这些类型通常通过常量来表示,例如 CV_8UC1、CV_32FC3、CV_32S 等。这些常量定义了图像的数据类型和通道数,具体含义如下: CV_8UC1: CV_8U 表示每个像素由一个8位无…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
