【小白也可做】基于2DCNN的多特征输入的股票预测项目实战(pytorch)(多特征)——仅用于课程和编程学习,不作为任何金融推荐!!!!

一、项目简介

股票预测是金融领域中的重要问题,通过对历史股票数据的分析和建模,我们可以尝试预测未来股票的价格趋势,为投资决策提供参考。本项目是基于PyTorch深度学习框架实现一个使用2D卷积神经网络(2DCNN)来进行股票预测的项目,该网络可以有效地处理时间序列数据,通过卷积层和提取输入序列中的特征,并通过全连接层进行预测。网络的输入是历史股票开盘价、收盘价、最高价、最低价、成交量指标、百分比变化量(多特征),输出是预测下一天的股票收盘价。【本项目的代码文件分模块整理,包含模型构建、数据划分、训练过程等模块都清晰分明】

二、实验数据集

实验采用的是深沪300数据集sh300.csv(后文有源码和数据集获取方式),这是公开的数据集,百度一下应该也可以找得到,数据集展示如下(所展示的数据是本人删掉某些列的数据,即sh300_test.csv),实验只使用了红框中的数据特征作为输入特征进行预测。

数据划分:以滑窗的方式进行数据划分,滑窗大小为20,输入特征为6,每次滑窗的第21天的收盘价为预测的标签值。
 

 三、实验环境

平台:Window 11

语言:python3.9

编译器:Pycharm

框架:Pytorch:1.13.1

四、实验内容及部分代码展示

1、model_2DCNN.py 模型构建

model_2DCNN.py定义了项目用到的网络模型,本项目用到的模型是三层的二维卷积网络,使用relu激活,最后使用两层全连接层输出预测结果。

 每层网络的输出结果为:

2、train.py 训练通用模板

训练过程集成到fit函数里面,包含测试集训练过程和验证集计算过程,是项目训练过程的通用代码,其他项目也可以在它的基础上修改后使用。

3、Config.py 参数定义

config中定义了项目所有需要的参数,可以在里面修改训练参数。其中可以看到三个卷积层的输出通道为[16,32,64]。根据实现效果调试[16,32,64]的训练效果比[32,64,128]要好很多,原因可能是数据集比较简单,通道数设置少一些就可以提取出不错的特征。

 4、DataSplit.py 数据划分

 DataSplit.py 是实现数据划分的函数,通过滑动窗口,将每个窗口大小的六个特征数据作为训练数据,将滑窗后面一个收盘价的数据作为预测结果并制作成标签,最后再进行划分训练数据和标签,最后分成训练集和验证集。

5、test_stock_2DCNN_run.py 训练文件

该py文件实现整体训练流程并做绘图操作。依次实现加载数据、数据标准化、取出WIND数据、划分训练集测试集、数据转化为Tensor、形成数据更迭器、载入模型、定义损失、定义优化器、开始训练、损失可视化、显示预测结果。

 6、test_pth.py 模型训练后的测试文件

采用模型训练完成后产生的的pth参数文件对测试数据进行预测,可以展示模型预测效果,前面的处理过程类似test_stock_2DCNN_run.py所示。

 7、loss_draw.py 模型训练后的测试文件

将训练产生并收集的loss.csv展示出来,也就是损失图,红框处可调展示范围。 

 五、实验结果及分析

 1、loss损失图

训练了200个epoch的损失图:

 纵坐标局部范围展示(0-0.0002):左图是上一篇文章写的1DCNN单特征实现的股票预测,右图是上述loss图的y轴局部放大展示,明显本篇模型的loss值比上一篇文章的低,也就是说多特征2DCNN的预测效果比单特征1DCNN的效果要好。

 2、预测效果展示

训练epoch=200后的股票收盘价预测效果如下(使用pth文件进行预测):其中,蓝色为预测曲线,红色为真实曲线,显然,预测基本相近,该模型对股价预测的效果不错,可以翻到上一篇的文章看一下单特征1DCNN的效果,明显要比这个差很多。

 局部展示(展示前两百天的预测效果):局部展示的效果也算是不错的

六、总结及资源

若有朋友需要可运行的源码和数据集,可以guan注【科研小条】公众号,回复【股票预测2dcnn】,即可获得。

LSTM(长短期记忆)是一种循环神经网络(RNN)的变体,在时间序列预测中应用广泛。实现多变量输入多步预测的LSTM模型需要使用seq2seq(序列到序列)模型来进行多步预测。下面是使用PyTorch实现的步骤: 1. 数据准备:将原始时间序列数据转换为多变量输入和多步预测的形式。对于多变量输入,需要将每个时间步的多个特征作为输入。对于多步预测,需要将未来多个时间步的目标值作为输出。 2. 搭建模型:使用PyTorch构建seq2seq模型。首先定义一个LSTM层作为编码器网络,接受多变量输入序列作为输入。然后定义另一个LSTM层作为解码器网络,接受编码器的输出和前一个时间步的预测作为输入。最后使用全连接层将解码器的输出映射到目标值的维度上。 3. 定义损失函数和优化器:选择适当的损失函数(例如均方误差)作为模型的目标函数,并选择合适的优化器(例如Adam)来优化模型参数。 4. 训练模型:使用历史数据训练LSTM模型。将多变量输入序列喂给编码器,然后将解码器的输出与目标值进行比较计算损失,并根据损失更新模型参数。 5. 多步预测:使用已经训练好的模型进行多步预测。首先将历史数据输入编码器,然后利用解码器逐步生成未来多个时间步的预测值。 需要注意的是,在实际应用中,可能需要进行数据归一化、验证集划分、超参数调整等步骤,以获得更好的模型性能。此外,可以根据具体情况对模型进行调整,例如添加额外的层、调整隐藏层单元数或调整训练迭代次数等。以上是使用PyTorch实现的LSTM多变量输入多步预测时间序列预测的基本步骤。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科研小条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值