基于CNN的股票预测方法【卷积神经网络】

基于机器学习方法的股票预测系列文章目录

一、基于强化学习DQN的股票预测【股票交易】
二、基于CNN的股票预测方法【卷积神经网络】


文章目录

  • 基于机器学习方法的股票预测系列文章目录
  • 一、CNN建模原理
  • 二、模型搭建
  • 三、模型参数的选择
    • (1)探究`window_size`的影响
    • (2)探究`kernel_size`的影响
    • (3)探究探究模型结构的影响
    • (4) 模型拟合效果
  • 四、数据处理
    • (1)数据变换
    • (2)Kalman滤波
  • 五、参考资料


本文探讨了利用卷积神经网络(CNN)进行股票预测的建模方法,并详细介绍了模型的搭建、参数选择以及数据处理方法。尽管序列建模通常与递归神经网络(如LSTM和GRU)相关,但本文展示了如何使用CNN进行时间序列数据的预测,完整代码放在GitHub上——Stock-Prediction-Using-Machine-Learing.

一、CNN建模原理

深度学习背景下的序列建模主题主要与递归神经网络架构(如LSTM和GRU)有关,但事实上CNN也可以用于对序列数据的建模。与处理图像所用的二维卷积不同,处理时间序列可以使用一维卷积,用多个以前的数据序列预测下一时刻。如下图所示,Input_length是指定用几个以前的数据来预测下一天的股票价格,用一个一个卷积核来滑动提取特征,最后通过一个线性层得到输出的预测值,具体网络搭建见下一小节。

截屏2022-05-23 下午8.22.12

其中两个关键的参数是:

  1. Input_length: 用几个以前的数据作为输入,来预测下一时刻。(在后文称为Window_size)
  2. Kernel_size: 卷积核大小。

事实上也可以用二维的卷积和来建模,比如输入可以是多只股票,用二维卷积核对多只股票同时建模预测,或者将一只股票的多个特征同时建模预测,本文仅探究用股票的收盘价来预测未来的股票收盘价格,没有利用股票数据的其他技术指标。

二、模型搭建

基于Pytorch深度学习框架,搭建的CNN网络如下所示:

kernel_size=2   #一维卷积核大小

class CNNmodel(nn.Module):
    def __init__(self):
        super(CNNmodel, self).__init__()
        self.conv1 = nn.Conv1d(1, 64, kernel_size=kernel_size)   #1xkersize的卷积核 
        #self.conv2 = nn.Conv1d(64,128,1)
        self.relu = nn.ReLU(inplace=True)
        self.Linear1 = nn.Linear(64*(window_size-kernel_size+1), 10)
        self.Linear2 = nn.Linear(10, 1)
        
    def forward(self, x):
        x = self.conv1(x)
        x = self.relu(x)
        x = x.view(-1)
        x = self.Linear1(x)
        x = self.relu(x)
        x = self.Linear2(x)
        return x

model = CNNmodel()
print(model)

选用relu函数作为激励函数,因为股票都是正数,而relu函数的性质,可以很好的避免模型输出值为负值。

三、模型参数的选择

(1)探究window_size的影响

调节CNN模型中window_size参数,并比较不同window_size下训练集与测试集的相对误差率,结果如下表所示:

window_size训练集相对误差率测试集相对误差率
52.22%2.18%
61.69%1.48%
72.30%2.27%
82.36%2.12%
151.65%1.58%
202.01%2.03%
502.37%2.55%
150 (kernel_size=40)3.21%2.72%

分析上表知:

  1. 不同window_size对结果有一定影响
  2. window_size比较大时,误差很大
  3. 在10左右,效果比较好,最终我们选择 window_size=6

(2)探究kernel_size的影响

调节CNN模型中kernel_size参数,并比较不同kernel_size下训练集与测试集的相对误差率,结果如下表所示(window_size=6):

Kernel_size训练集相对误差率测试集相对误差率
21.69%1.48%
31.76%1.58%
41.82%1.94%
51.90%1.73%

分析上表数据知较小的kernel_size能使相对误差率更小,最终我们选择kernel_size=2。

(3)探究探究模型结构的影响

调节CNN模型中模型结构,并比较不同模型结构下的平均误差和平均相对误差率,结果如下表所示:

模型结构平均误差平均相对误差率
两个卷积层0.522.46%
1个卷积层,线性层1000.462.29%
1个卷积层,线性层100.281.38%

由上表知,模型对学习率十分敏感;模型结构过于复杂,不容易学习,且容易过拟合。

(4) 模型拟合效果

通过以上探究得到的模型结构以及参数,以AAPL股票为例,采用原始数据进行训练,其预测结果如下图所示:

截屏2022-05-29 下午10.55.49

由上图知,以原始数据进行训练有不错的拟合效果,但滞后比较明显,神经网络会“偷懒”,这是因为数据序列中产生了变化趋势,而基于滑动时间窗口策略的对发生变化趋势的数据感知是滞后的。

对测试集进行预测:

截屏2022-05-29 下午10.34.21

四、数据处理

(1)数据变换

为了解决预测过程中出现的“滞后”问题,常常对原始数据进行一定的处理。常见的数据处理方法有:

  1. 数据归一化
  2. 不直接给出希望模型预测的未经处理的真实值,对输入样本进行非线性化的处理如,如:平方、开根号、ln等
  3. 差分,预测时间t和t-1处值的差异,而不是直接预测t时刻的值

如以AAPL股票数据为例,对其收盘价取其平方的对数进行训练,最终的预测效果如下图所示:

与上一小节的图对比知,“滞后”现象得到显著的减弱,模型的可信度更好。

(2)Kalman滤波

卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。

Kalman滤波原理及数理处理过程如下:

  1. 给定初始估计值、系统输入、初始协方差矩阵和误差的方差 Q Q Q, 首先要计算预测值、预测值和真实值之间误差协方差矩阵:

X ^ k ′ = A X ^ k − 1 + B u k − 1 P k ′ = A P k − 1 A T + Q \begin{aligned} &\hat{X}_{k}^{\prime}=A \hat{X}_{k-1}+B u_{k-1} \\ &P_{k}^{\prime}=A P_{k-1} A^{T}+Q \end{aligned} X^k=AX^k1+Buk1Pk=APk1AT+Q

  1. 然后根据 P k ′ P_{k}^{\prime} Pk 计算卡尔曼增益 K k K_{k} Kk :

K k = P k ′ H T ( H P k ′ H T + R ) − 1 K_{k}=P_{k}^{\prime} H^{T}\left(H P_{k}^{\prime} H^{T}+R\right)^{-1} Kk=PkHT(HPkHT+R)1

  1. 然后根据卡尔曼增益 K k K_{k} Kk X ^ k ′ \hat{X}_{k}{ }^{\prime} X^k 以及测量值 Z k Z_{k} Zk, 调和平均得到估计值:

X ^ k = X ^ k ′ + K k ( Z k − H X ^ k ′ ) \hat{X}_{k}=\hat{X}_{k}^{\prime}+K_{k}\left(Z_{k}-H \hat{X}_{k}^{\prime}\right) X^k=X^k+Kk(ZkHX^k)

  1. 最后还要计算估计值和真实值之间的误差协方差矩阵, 为下次递推做准备:

P k = ( I − K k H ) P k ′ P_{k}=\left(I-K_{k} H\right) P_{k}^{\prime} Pk=(IKkH)Pk

以AAPL股票数据为例,对其收盘价进行kalman滤波后,以CNN模型进行训练,结果如下图所示:

截屏2022-05-29 下午10.59.48

与图3对比可知,图3中平均误差为0.11,相对误差率为2.30%,采用kalman滤波后,平均误差为0.08,相对误差率为1.71%,效果变好。

通过前面2种不同数据处理方法对不同模型效果的影响,我们可以看到,不同数据处理方法对不同模型的影响不一样,但总的来说对数据进行相应的处理后,能够提升模型的性能。而通过实验我们发现Kalman滤波进行数据处理后,模型效果有显著的提升。

五、参考资料

  1. 王宇轩.基于卷积神经网络的股票预测[D].天津工业大学,2019.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【区块链+基础设施】珠三角征信链 | FISCO BCOS应用案例

“珠三角征信链”是中国人民银行广州分行、中国人民银行深圳市中心支行按照中国人民银行总行工作部署,积 极贯彻珠三角一体化发展、粤港澳大湾区建设等国家战略而建设的跨区域征信一体化数据中心枢纽,以 FISCO BCOS 为底链构建应用平台,并由微…

WPS图片无法居中、居中按钮无法点击(是灰色的)

在PPT中复制对象到WPS word中后,导致图片一直靠左,而无法居中 直接选中图片是错误的: 这时你会发现居中按钮无法点击(是灰色的) 正确的是选中图片的前面的部分,然后点击居中,或者Ctrl E

AI基本概念(人工智能、机器学习、深度学习)

人工智能 、 机器学习、 深度学习的概念和关系 人工智能 (Artificial Intelligence)AI- 机器展现出人类智慧机器学习 (Machine Learning) ML, 达到人工智能的方法深度学习 (Deep Learning)DL,执行机器学习的技术 从范围…

论坛万能粘贴手(可将任意文件转为文本)

该软件可将任意文件转为文本。 还原为原文件的方法:将得到的文本粘贴到记事本,另存为UUE格式,再用压缩软件如winrar解压即可得到原文件。建议用于小软件。 下载地址:https://download.csdn.net/download/wgxds/89505015 使用演示…

各类排序方法 归并排序 扩展练习 逆序对数量

七月挑战一个月重刷完Y总算法基础题,并且每道题写详细题解 进度:(3/106) 归并排序的思想也是分而治之 归并优点:速度稳定,排序也稳定 排序也稳定(数组中有两个一样的值,排序之后他们的前后顺序不发生变化,我们就说…

09 - matlab m_map地学绘图工具基础函数 - 绘制区域填充、伪彩色、加载图像和绘制浮雕效果的有关函数

09 - matlab m_map地学绘图工具基础函数 - 绘制区域填充、伪彩色、加载图像和绘制浮雕效果的有关函数 0. 引言1. 关于m_pcolor2. 关于m_image3. 关于m_shadedrelief4. 关于m_hatch5. 结语 0. 引言 本篇介绍下m_map中区域填充函数(m_hatch)、绘制伪彩色图…

安装和微调大模型(基于LLaMA-Factory)

打开终端(在Unix或macOS上)或命令提示符/Anaconda Prompt(在Windows上)。 创建一个名为lora的虚拟环境并指定Python版本为3.9。 https://github.com/echonoshy/cgft-llm/blob/master/llama-factory/README.mdGitHub - hiyouga/…

教你如何在群晖上部署m3u8视频下载工具,支持浏览器一键添加下载任务

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 快速开始📝 群晖部署📝 部署浏览器一键添加任务🎈 常见问题 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在当今数字化时代,视频内容的下载和管理变得越来越重要。尤其是对于那些使用群晖NAS设备的用户,一…

Redis慢查询

Redis慢查询 目录 Redis慢查询慢查询配置慢日志操作返回参数介绍 Redis的慢查询就是当命令执行时间超过预定的阈值后将这条命令记录下来,与MySQL的功能类似 慢查询配置 默认阈值是10毫秒,即10000微秒 临时修改阈值为20毫秒 127.0.0.1:6379> confi…

旋转变压器软件解码simulink仿真

1.介绍 旋转变压器是一种精密的位置、速度检测装置,尤其适用于高温、严寒、潮湿、高速、振动等环境恶劣、旋转编码器无法正常工作的场合。旋转变压器在使用时并不能直接提供角度或位置信息,需要特殊的激励信号和解调、计算措施,才能将旋转变压…

Mysql 的账户管理,索引,存储引擎

目录 一.MySQL的账户管理 1.存放用户信息的表 2.查看当前使用的用户 3.新建用户 4.修改用户名称 5.删除用户 6.修改用户密码 7.破解密码 8. 远程登录 9.用户权限管理 9.1 权限类别 9.2 查看权限 9.3 授予权限 9.4 撤销权限 二.索引 1. 索引管理 1.1 查看索…

便签 Pro(Mac 智能便签工具)专业版怎么样,值得购买吗?

使用 Mac 的小伙伴平时都是怎么记录工作生活中的碎片信息?用聊天软件,还是系统备忘录呢? 实际体验下来,其实都难以称得上好用。 赶紧来了解一下 Mac 多彩思维速记工具便签 Pro!拥有智能边框大小、iCloud 同步、历史记…

使用AI工具 Baidu Comate 辅助编码 快速定位修改Bug

一、Baidu Comate 概述 Baidu Comate(百度智能编码助手)是一款基于文心大模型的新一代编码辅助工具。它结合了百度多年积累的编程现场大数据和外部优秀开源数据,旨在为用户提供高质量的编程代码生成和优化服务。Comate的主要目标是提升编码效…

我在中东做MCN,月赚10万美金

图片|Photo by Ben Koorengevel on Unsplash ©自象限原创 作者丨程心 在迪拜购物中心和世界最高建筑哈利法塔旁的主街上,徐晋已经“蹲”了三个小时,每当遇到穿着时髦的年轻男女,他都会上前询问,有没有意愿成为…

AI时代的软件工程:挑战与改变

人工智能(AI)正以惊人的速度改变着我们的生活和工作方式。作为与AI关系最为密切的领域之一,软件工程正经历着深刻的转变。 1 软件工程的演变 软件工程的起源 软件工程(Software Engineering)是关于如何系统化、规范化地…

基于Tools体验NLP编程的魅力

大模型能理解自然语言,从而能解决问题,但是就像人类大脑一样,大脑只能发送指令,实际行动得靠四肢,所以LangChain4j提供的Tools机制就是大模型的四肢。 大模型的不足 大模型在解决问题时,是基于互联网上很…

昇思25天学习打卡营第13天|BERT

一、简介: BERT全称是来自变换器的双向编码器表征量(Bidirectional Encoder Representations from Transformers),它是Google于2018年末开发并发布的一种新型语言模型。与BERT模型相似的预训练语言模型例如问答、命名实体识别、自…

6.x86游戏实战-C++实现跨进程读写-通过基址读取人物状态标志位

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:5.x86游戏实战-CE定位基地址 上一个内容找出了人物状态标志位的基址&#xff0…

ROS学习笔记(17):建图与定位(1)

目录 0.前言 1.定位和建图 1.里程计(Odometry) 2.扫描匹配(Scan Matching) 3.结尾 0.前言 好久不见各位,前段时间忙着考试(6级和一些专业课)和摆烂断更了近30天,现在哥们回来更…