股票预测模型中注意力多层Attention RNN LSTM 的应用
全文链接:https://tecdat.cn/?p=37152
原文出处:拓端数据部落公众号
Attention 机制是一种在神经网络处理序列数据时极为关键的技术,它赋予了模型“聚焦”能力,能够自动评估输入序列中各部分的重要性。通过为序列中的每个元素分配不同的权重,Attention 确保网络在处理过程中能够优先关注那些对任务更为关键的部分,从而显著提升模型的预测精度和效果。
当Attention机制与LSTM(长短时记忆网络)相结合时,这一组合展现出了更为强大的序列处理能力。LSTM本身设计用于捕捉序列中的长期依赖关系,通过其独特的门控机制来控制信息的遗忘与保留。然而,面对极长的序列,LSTM可能会遭遇信息衰减或传递不畅的挑战。此时,Attention机制的引入如同一剂强心针,它允许模型动态地调整对序列不同片段的关注度,确保关键信息得以高效捕捉而不被忽略。
因此,本文帮助客户通过Attention + LSTM 的结合不仅解决了LSTM在处理长序列时可能遇到的问题,还通过两者优势互补,极大地增强了模型对复杂序列数据的理解和分析能力,既提升了性能,也优化了计算效率。
股票预测模型使用注意力多层 RNN LSTM
数据准备
首先,我们从CSV文件中读取股票数据,并计算每对相邻交易日之间的对数收益率,假设收益率服从对数正态分布。接着,使用z-score标准化方法将数据映射到均值为0、方差为1的分布上,以减少不同量纲对模型训练的影响。
计算两点之间的对数收益率。假设收益率呈对数正态分布。
使用 zscore 将一个 pandas 系列映射,使其均值为 0,方差为 1,以对数据进行标准化。

处理所有股票代码以生成数据框
Final = pd.DataFrame()
for f in os.listdir(datapath):filepath = os.path.join(datapath,f)if filepath.endswith('.csv'):

数据透视
P是每个股票所有条目的扁平化数据框,每行代表一天
mi = P.columns.tolist()

设置目标
为了简化问题,我们将预测目标设定为股票价格的涨跌方向(上涨、下跌或持平),分别用1、-1和0表示。通过计算每日的收益率,我们可以为每个交易日打上相应的标签。
现在我们有了输入和目标,算是有了。InputsDF 包含了我们想要预测的所有输入。Targets DF 包含了每个股票每天的收益率。首先,由于我们没有太多数据,让我们为预测设定一个比每个股票的收益率更简单的目标。
我们将目标标记为上涨(1)、下跌(-1)或持平(0)。顶部图表展示了如果我们每天为每个股票投入 1 美元将会出现的情况。底部图表展示了如果在上涨(1)的日子做多整个股票组合,在下跌(-1)的日子做空,在(0)的日子忽略会产生的结果。您能够看出这是一个具有价值的预测目标。
Labeled['max_return'] = Labeled['class'] * Labeled['return']
Labeled


建立基线
为了评估后续模型的性能,我们首先构建了逻辑回归和全连接神经网络作为基线模型。
逻辑回归
from sklearn import linear_model
from sklearn.metrics import classification_report,confusion_matrix
logreg = linear_model.LogisticRegression(C=1e5)
基线全连接前馈神经网络
使用TensorFlow构建一个简单的全连接神经网络作为另一个基线。
with tf.Graph().as_default():model = Model()input_ = train[0]target = train[1]config = tf.ConfigProto()jit_level = tf.OptimizerOptions.ON_1config.graph_options.optimizer_options.global_jit_level = jit_level

Res = (1+Result[-test_size:][['return','max_return','nn_ret']]).cumprod()
Res[0] =0
Res.plot(secondary_y='max_return')

print(classification_report(Result['class'],Result['mod_nn_prod']))

Result[Result.multi_class==6]['nn_pred'].hist()


注意力循环神经网络与MultiRNNCell LSTMs
基于TensorFlow,我们构建了一个包含注意力机制的RNN模型,使用LSTM单元作为RNN的基本组件。注意力机制通过赋予不同时间步长不同的权重,帮助模型更好地捕捉关键信息。
在本节中,我们将创建一个能够学习考虑过去情况的 rnn 模型。此模型基于 AttentionCellWrapper,这是在以下https://arxiv.org/pdf/1409.0473v7.pdf 中描述的一种新颖方法,标题为“通过联合学习对齐和翻译的神经机器翻译”
rnn 网络定义
from tensorflow.contrib.layers.python.layers.initializers import xavier_initializer# Parameters
learning_rate = 0.0007
display_step = 1
logpath = '/tmp/rnn_logs/example'
训练 RNN
# 构建模型并将所有操作封装到作用域中,使
# Tensorboard 的图形可视化更方便
with tf.Graph().as_default():model = RNNModel()input_ = train[0]target = train[1]
# XLAconfig = tf.ConfigProto()

RNN 结果
Result['rnn_pred'] = final_preds
Result['mod_rnn_prod'] = list(map(lambda x: -1 if x <5 else 0 if x==5 else 1,final_preds))

通过对比基线模型和注意力RNN模型的预测结果,我们发现注意力RNN模型在预测准确率、召回率和F1分数等指标上均有所提升,表明注意力机制有效地帮助模型捕捉到了股票数据中的关键时序特征。
Result[Result.multi_class==6]['rnn_pred'].hist()
<matplotlib.axes._subplots.AxesSubplot at 0x7f86a1938128>






结论
本文提出了一种基于注意力机制的RNN模型用于股票价格预测,并通过实验验证了其有效性。与基线模型相比,该模型在预测性能上取得了显著提升。未来工作可以进一步探索不同注意力机制、优化模型结构以及融合更多外部数据源,以进一步提升预测精度和泛化能力。
参考文献
[1]林杰,康慧琳.基于注意力机制的LSTM股价趋势预测研究[J].上海管理科学.2020,(1).
[2]包振山,郭俊南,谢源,等.基于LSTM-GA的股票价格涨跌预测模型[J].计算机科学.2020,(z1).DOI:10.11896/jsjkx.190900128 .
[3]文宝石,颜七笙.数据多维处理LSTM股票价格预测模型[J].江西科学.2020,(4).DOI:10.13990/j.issn1001-3679.2020.04.001 .
[4]杨青,王晨蔚.基于深度学习LSTM神经网络的全球股票指数预测研究[J].统计研究.2019,(3).DOI:10.19343/j.cnki.11-1302/c.2019.03.006 .
[5]乔若羽.基于神经网络的股票预测模型[J].运筹与管理.2019,(10).DOI:10.12005/orms.2019.0233 .
[6]巴曙松,蒋峰."违约潮"背景下的信用风险测度研究[J].湖北经济学院学报.2019,(6).DOI:10.3969/j.issn.1672-626x.2019.06.001 .
[7]王理同,薛腾腾,王惠敏,等.基于循环神经网络的股指价格预测研究[J].浙江工业大学学报.2019,(2).DOI:10.3969/j.issn.1006-4303.2019.02.013 .
[8]王卫红,卓鹏宇.基于PCA-FOA-SVR的股票价格预测研究[J].浙江工业大学学报.2016,(4).DOI:10.3969/j.issn.1006-4303.2016.04.010 .
[9]许兴军,颜钢锋.基于BP神经网络的股价趋势分析[J].浙江金融.2011,(11).DOI:10.3969/j.issn.1005-0167.2011.11.015 .
[10]韦艳华,张世英.金融市场的相关性分析--Copula-GARCH模型及其应用[J].系统工程.2004,(4).DOI:10.3969/j.issn.1001-4098.2004.04.002 .
相关文章:
股票预测模型中注意力多层Attention RNN LSTM 的应用
全文链接:https://tecdat.cn/?p37152 原文出处:拓端数据部落公众号 Attention 机制是一种在神经网络处理序列数据时极为关键的技术,它赋予了模型“聚焦”能力,能够自动评估输入序列中各部分的重要性。通过为序列中的每个元素分…...
C语言 | Leetcode C语言题解之第313题超级丑数
题目: 题解: int nthSuperUglyNumber(int n, int* primes, int primesSize) {long dp[n 1];int pointers[primesSize];for (int i 0; i < primesSize; i) {pointers[i] 0;}long nums[primesSize];for (int i 0; i < primesSize; i) {nums[i] …...
PHP健身微信小程序系统源码
🏋️♀️健身新潮流!解锁“健身微信小程序”的全方位塑形秘籍 📱开篇:掌中健身房,随时随地动起来 你还在为找不到合适的健身场地或教练而烦恼吗?是时候告别这些束缚,拥抱“健身微信小程序”…...
树组件 el-tree 数据回显
树组件 el-tree 数据回显 树型结构的数据回显问题: 这里我只放了核心代码,主要是如何获取选中的树节点的id集合和如何根据树节点的id集合回显数据 大家根据需要自行更改! <el-tree ref"authorityRef" node-key"id" …...
54、PHP 实现希尔排序
题目: PHP 实现希尔排序 描述: 思路分析:希尔排序是基于插入排序的,区别在于插入排序是相邻的一个个比较(类似于希尔中h1的情形),而希尔排序是距离h的比较和替换。 希尔排序中一个常数因子n&a…...
linux 虚拟机解压arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2并arm-linux-gcc
解压到当前目录:tar -jxvf arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2解压到指定目录:tar -jxvf arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2 -C /xx/xxx/xxx-C大写,后面接要解压的路径解压后得到一个 opt文件夹 在/usr/local/bin 下创建新的…...
泛化的最近点迭代法(Generalized-ICP)
Generalized-ICP算法是由斯坦福大学的Aleksandr V. Segal、Dirk Haehnel和Sebastian Thrun提出的,于2009年在Robotics science and system会议上发表。 GICP是一种ICP算法的变体,其原理与ICP算法相同,之所以称为泛化的ICP算法是因为大多数ICP…...
Java | Leetcode Java题解之第313题超级丑数
题目: 题解: class Solution {public int nthSuperUglyNumber(int n, int[] primes) {int[] dp new int[n 1];int m primes.length;int[] pointers new int[m];int[] nums new int[m];Arrays.fill(nums, 1);for (int i 1; i < n; i) {int minN…...
单细胞数据整合-去除批次效应harmony和CCA (学习)
目录 单细胞批次效应学习 定义 理解 常用的去批次方法-基于Seurat 1) Seurat-integration(CCA) 2) Seurat-harmony 去批次代码 ①Seurat-integration(CCA) ②Seurat-harmony 单细胞批次效应学习 …...
MuRF代码阅读
对图像Size的处理, 以适应Transformer 在MVSPlat 当中使用 Center_Crop 裁剪图像,适用于 Transformer 的32 倍数, 其中 焦距 f 不变化,只改变 cx,cy.MuRF 直接对图像进行 插值,合成理想的 size. 根据 ori_size 和 inference_size…...
pycharm无法导入pyside2模块;“ModuleNotFoundError: No module named ‘PySide2“
参考博客: 1)pycharm中配置pyqt designer和pyside2【功能是在pycharm中可以打开designer,并且可以把.ui文件转换为.py文件】 https://blog.csdn.net/kuntliu/article/details/117219237 2).ui转化为.py后,点击运行,报错…...
c语言指针中“数组名的理解”以及“一维数组传参”的本质
数组名的理解 数组名就是数组首元素的地址。 例如:输入一个数组的所有元素,再打印出来。 另一种写法 以上可以看出:*arri) arr[i] 也即是:*(iarr)i[arr] 本质上无区别 1:数组就是数组,是一块…...
计算机毕业设计Python+Flask微博舆情分析 微博情感分析 微博爬虫 微博大数据 舆情监控系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
基于Python/flask的微博舆情数据分析可视化系统 python爬虫数据分析可视化项目 编程语言:python 涉及技术:flask mysql echarts SnowNlP情感分析 文本分析 系统设计的功能: ①用户注册登录 ②微博数据描述性统计、热词统计、舆情统计 ③微博数…...
KubeBlocks v0.9 解读|最高可管理 10K 实例的 InstanceSet 是什么?
实例(Instance)是 KubeBlocks 中的基本单元,它由一个 Pod 和若干其它辅助对象组成。为了容易理解,你可以先把它简化为一个 Pod,下文中将统一使用实例这个名字。 InstanceSet 是一个通用 Workload API,负责…...
ZW3D二次开发_菜单_禁用/启用表单按钮
1.如图示,ZW3D可以禁用表单按钮(按钮显示灰色) 2.禁用系统默认表单按钮,可以在菜单空白处右击,点击自定义,找到相关按钮的名称,如下图。 然后使用代码: char name[] "!FtAllBo…...
windows子系统wsl完成本地化设置locale,LC_ALL
在 Windows 的子系统 Linux(WSL)环境中,解决本地化设置问题可以采取以下步骤: 1. **检查本地化设置**: 打开你的 WSL 终端(比如 Ubuntu、Debian 等),运行以下命令来查看当前的本…...
MYSQL 根据条件order by 动态排序
文章目录 案例1:根据动态值的不同,决定某个字段是升序还是降序案例2:根据动态值的不同,决定使用哪个字段排序 最近在做大数据报表时,遇到这样一种情况,若是A类型,则部门按照正序排序;…...
DirectX修复工具下载安装指南:电脑dll修复拿下!6种dll缺失修复方法!
在日常使用电脑的过程中,不少用户可能会遇到“DLL文件缺失”的错误提示,这类问题往往导致程序无法正常运行或系统出现不稳定现象。幸运的是,DirectX修复工具作为一款功能强大的系统维护软件,能够有效解决大多数DLL文件缺失问题&am…...
vue3(1)虚拟数字键盘的封装,(2)以及子组件改变父组件变量的值进而使子组件实时响应值的变化,(3)子组件调用父组件中的方法(带参)
父组件 <template><div><!-- 数字键盘 --><NumericKeyboardv-model:myDialogFormVisible"myDialogFormVisible" :myValueRange"myValueRange"submit"numericKeyboardSubmitData"/></div> </template><s…...
反序列化靶机serial
1.创建虚拟机 2.渗透测试过程 探测主机存活(目标主机IP地址) 使用nmap探测主机存活或者使用Kali里的netdicover进行探测 -PS/-PA/-PU/-PY:这些参数即可以探测主机存活,也可以同时进行端口扫描。(例如:-PS࿰…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
