股票预测模型中注意力多层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࿰…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...