“我报名参加金石方案1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情”
MATLAB-依据长短期回忆网络(LSTM)的SP500的股票价格猜测 股价猜测 matlab实战 数据剖析 数据可视化 时序数据猜测 变种RNN 股票猜测
摘要
近些年,跟着核算机技能的不断开展,神经网络在猜测方面的运用愈加广泛,尤其是长短期回忆人工神经网络(Long Short-Term Memory,LSTM)在各范畴、各学科都有运用。它是一种时刻循环神经网络,是为了处理一般的RNN(循环神经网络)存在的长时刻依靠问题而专门规划出来的,十分合适处理长周期时刻序列猜测问题,而且猜测速度快,准确度高。因而LSTM猜测办法被广泛运用在天气预报、股票猜测、行为猜测等很多范畴。依据这些优点,本文采用LSTM树立猜测模型,依据美国规范普尔500股票指数的历史收盘价来猜测未来收盘价的改变趋势。
关键词:LSTM长短期回忆人工神经网络,时刻序列剖析,股票猜测
榜首章 前言
1.1 研讨布景
股票市场具有高收益与高风险并存的特性,猜测股市走势一直被一般股民和出资组织所关注。股票市场是一个很杂乱的动态体系,受多方面要素的影响,例如国家金融政策的调整、公司内部结构的调整以及媒体舆论的渲染。针对股票猜测,人们在长时刻实践和研讨的根底上总结出一套股票猜测办法,并进行了根本的核算剖析,但这种传统的股票猜测办法很难准确地揭示股票的改变规则。金融范畴一直是机器学习算法运用较为活跃的范畴,因为新的算法或许会给金融范畴带来明显的经济利益,在人工智能和机器学习不断开展的布景下,金融范畴的机器学习以及深度学习运用也得到了人们的关注。所以本文运用长短期回忆人工神经网络(LSTM),一种在时刻序列剖析中有较好作用的深度学习模型,对美国规范普尔500股票指数的历史数据进行剖析以及猜测,试图探寻股票趋势之间的改变规则,并对股票市场的猜测作用进行探索,协助股民以及出资组织能更好地猜测股市的走势。
1.2 研讨现状
跟着股票市场强大,时刻序列剖析相应迎来兴起,时刻序列的根本思想是运用序列变量与时刻的联系树立核算模型来做猜测。迄今为止,时刻序列办法成果颇丰,相应诞生ARIMA差分整合移动自回归模型算法、滑动均匀、指数平滑法、简略移动均匀法、加权移动均匀法、自回归滑动均匀、广义自回归条件异方差以及蒙特卡洛模拟等时刻序列模型。因为股票数据这种金融时刻序列目标遭到多种要素的影响,往往对错平稳的、非线性的以及高噪声的,不同于以往时刻序列办法只触及时刻这个单方面影响要素,所以传统时刻序列办法往往不合适股票数据,猜测功用不行理想。而跟着互联网与核算机技能的打破,数据存储技能的开展,迎来大数据时代,人们从电脑端和手机端不断地接触到大量的数据以及信息,关于庞大的数据,如何从中取得有用且人类想要的信息变为研讨要点。因为股票市场的时效性,每天大批量数据的产生,迄今为止,股票市场现已累积了足量的历史数据,所以咱们能够很好地运用以往的历史数据,通过剖析这些数据,探寻其间的股票走势的规则 ,可是股票的价格遭到大量要素的影响,这使得股价的猜测不是那么简略,可是,跟着机器学习技能的开展,使得从海量信息中发掘出来对股票猜测极其重要的信息有了必定的或许性,所以股票猜测这项作业依然是具有极高的价值和含义的。
1.3 研讨含义
在股票买卖进程中,如果树立了金融猜测模型,咱们将历史数据灌入,学习到参数,然后对未来的股票价格进行猜测。假如模型的猜测价格高于当天的收盘价格,即模型告知咱们未来股票价格或许呈现上涨,则咱们能够持续持仓这只股票以期取得后续更高的出资收益;别的,状况相反时,咱们能够依据模型的主张采取相反的行动与动作。所以树立一个准确且高效的股票猜测模型关于出资者更好的收益显得十分有含义。当然,找到这种股票价格上涨下跌趋势的规则关于国家宏观调控和企业的经营管理也是有很高的现实价值的。股票猜测研讨不只仅聚焦在技能上,技能上的打破固然重要,可是在数据的处理以及特征工程上的精益求精上往往能给股票猜测模型精度带来适当明显的进步。所以说股票猜测这项作业依然是具有极高的价值和含义的,股票市场的价格动摇研讨不只有重要的学术含义,而且有重要的实践含义。这能协助咱们更好的了解和掌握股票市场的运转规则,以及探寻其对实在经济的影响机制与影响程度,能协助咱们在股票价格剧烈动摇状况下挑选并实施有用的货币政策,这有助于减轻和消除来自股票市场的不稳定要素,然后进一步进步各国宏观经济的运转质量。
第二章 根本模型论说
2.1 LSTM模型的理论概述
长短期回忆神经网络(long shortterm memory networks,LSTM)是一种时刻递归神经网络,是循环神经网络的一种变体,合适处理和猜测时刻序列中距离和推迟相对较长的重要事件,这一技能特征与股票猜测问题有着很高的契合度,将一般循环网络中的隐藏节点规划为自循环方式,回忆单元维持一个差错流,从而能够回忆长时期的有用信息,避免梯度爆破和梯度消失。LSTM 在文本猜测、情感剖析和股票猜测等范畴都有着十分优异的体现,结合股票特性将根底数据转换为相关的技能目标。它还改善了RNN中存在的长时刻依靠问题;LSTM的体现通常比时刻递归神经网络及隐马尔科夫模型(HMM)更好;作为非线性模型,LSTM可作为杂乱的非线性单元用于结构更大型深度神经网络。可是依然存在缺陷,便是RNN的梯度问题在LSTM及其变种里边得到了必定程度的处理,但仍是不行。它能够处理100个量级的序列,而关于1000个量级,或许更长的序列则依然会显得很扎手;另一个缺陷是每一个LSTM的cell里边都意味着有4个全衔接层(MLP),如果LSTM的时刻跨度很大,而且网络又很深,这个核算量会很大且很耗时。
2.2 LSTM的三个主要结构
2.2.1 忘记门
在咱们 LSTM 中的榜首步是决议咱们会从细胞状况中丢掉什么信息。这个决议通过一个称为忘记门层完结
2.2.2 输入门
输入门是决议让多少新的信息加入到cell状况中来。完成这个需求包含两个 进程:首要,需求sigmoid层决议哪些信息需求更新;tanh 层生成一个向量,也便是备选的用来更新的内容。在下一步,咱们把这两部分联合起来,对cell的状况进行一个更新。
2.2.3 输出门
终究,咱们需求确认输出什么值。这个输出将会依据咱们的细胞状况,可是也是一个过滤后的版别。首要,sigmoid层来确认细胞状况的哪个部分将被输出。接着,细胞通过 tanh 进行处理状况并将它和sigmoid层的输出相乘,终究会输出咱们确认输出的那部分内容。
2.3 改善模型
LSTM模型有十分强大的功用,本文只是运用了相对简略的单步单特征的猜测,更深化研讨的话能够发现,LSTM还能够进行多步单特征,单步多特征,多步多特征等更强大的猜测作业。除此之外,模型进行改善的当地还能够从模型的网络结构,练习模型的选项,网络层的激活函数等进行调整改善。
第三章 数据处理
3.1 数据读取与可视化展现
首要从包含 2010 年 1月1日至 2021 年 12 月30日规范普尔 500 股票指数的开盘价、最高价、最低价、收盘价的美国规范普尔500指数历史数据.xls的excel文件依据时刻拆分红2021年6月1日之前的练习数据TrainData.xls,2021年6月1日至12月30日的查验数据InspectData.xls,以及2022年1月到3月30日的猜测数据TestData.xls。数据格式大致如图所示:
将三个excel文件的NumData数值型数据的榜首列的一切元素作为收盘价的数据,把TestData文本型数据的榜首列的日期数据转换成日期类型数据,为了后续读取数据的方便,将日期以及收盘价保存到各自的mat文件中。
然后通过读取mat文件的数据,以日期作为横轴数据,收盘价作为纵轴数据对三个文件的全体数据做一个大致的可视化剖析。练习数据,查验数据,猜测数据的运转成果分别如下:
从运转成果来看,SP500的收盘价趋势除了中心几次断崖式暴跌之外,大致上是呈现上涨的趋势,详细放大细看的话不难发现,股票的收盘价全体上呈现一个动摇的上涨趋势。
3.2 数据预处理
3.2.1 数据分区
紧接着,在开端猜测之前,咱们需求对数据进行必定的处理,首要需求把SP500的收盘价数据转换成(1, numel(SP500)) 形状的行数据,然后加载mat文件,用不同的变量保存练习,查验,猜测的数据。
3.2.2 规范化数据
为了取得较好的拟合作用并避免练习发散,首要通过mean办法预计std办法分别获取练习数据的均值以及规范差,将练习数据通过(数据-均值)/规范差的方式规范化为具有零均值和单位方差的规范化练习数据。在猜测时,咱们将运用与练习数据相同的参数来规范化测试数据。
3.2.3 预备猜测变量以及呼应变量
要猜测序列在将来时刻步的值,需求将呼应变量指定为将值移位一个steptime时刻步的练习序列。也便是说,在输入序列的每个时刻步,LSTM 网络都学习猜测下一个时刻步的值。猜测变量是没有终究时刻步的练习序列。
3.3 练习模型
3.3.1 定义 LSTM 网络结构以及练习选项
通过matlab提供的构建深度学习网络的规划器,创立如图所示的LSTM 回归网络。
需求注意的是,咱们需求手动修改一下其间网络层的一些参数,因为咱们是单步猜测,所以序列输入层的输入巨细应该是1,将LSTM网络设置成250个神经元,将状况激活函数设置为tanh,将激活门函数设置为sigmoid,将输出模式设置成sequence。将忘记层的忘记率设置成45%,表明将有45%的概率将神经元暂时从网络中丢掉,以此来避免过拟合的状况产生。然后再设置一个全衔接层,最终以回归输出的方式将数据进行输出。
紧接着,咱们需求指定练习的选项,这里将求解器设置为 ‘adam’ 并进行 350 轮练习。为避免梯度爆破,将梯度阈值设置为 1。指定初始学习率为 0. 002,为避免网络震荡不收敛,在 150 轮练习后通过乘以因子 0.2 来降低学习率。
3.3.2 练习LSTM网络
咱们需求运用 trainNetwork 以指定的练习选项练习 LSTM 网络,并传入猜测变量以及呼应变量。 练习的进程如图所示,能够看到RMSE均方根差错与Loss丢失函数在刚开端下降的比较快,到后来Loss丢失函数就趋近于0,RMSE均方根差错就趋于0.1,能够从这两个目标看出练习的作用仍是不错的
3.3.3 对查验数据集进行规范化处理
咱们将运用练习数据的均值以及规范差对验证数据进行Z-Score规范化处理,然后再取其(1,end-1)的数据作为猜测的输入数据
3.4 模型猜测
3.4.1 猜测将来的时刻步
首要咱们需求初始化网络状况,并先对练习数据 XTrain 进行猜测,猜测将来多个时刻步的值,咱们需求运用 predictAndUpdateState 函数一次猜测一个时刻步,并在每次猜测时更新网络状况,关于每次猜测,咱们运用前一次的实在值作为函数的输入。接下来,运用练习呼应的最终一个时刻步进行榜首次猜测。循环其余猜测并将前一次猜测输入到 predictAndUpdateState。因为咱们的是单步猜测,所以咱们将运用CPU的环境进行猜测,并将 predictAndUpdateState 的ExecutionEnvironment选项设置为 cpu
3.4.2 反规范化
因为之前传入的数据是运用了规范化处理的,所以输出的猜测值也是通过规范化后的数据,所以终究咱们需求将猜测的成果值反规范化,终究转换为实践的猜测值。
3.4.3 核算差错目标
咱们需求依据去规范化的猜测值去核算差错目标。关于 RMSE均方根差错,首要咱们需求先获取到猜测样本的实在值,然后对样本点的测量值和实在值求差,求平方后做均匀运算,最终取根植,获取到RMSE均方根差错。关于MAE均匀肯定差错,咱们需求把猜测值与实在值做差,然后取肯定值后做均匀处理,最终获取到MAE均匀肯定差错。关于MAPE均匀肯定百分比差错,咱们需求把猜测值与实在值做差,成果除以实在值,取肯定值后做均匀处理,最终获取到MAPE均匀肯定百分比差错。
核算所得的RMSE均方根差错成果如图所示:
核算所得的MAE均匀肯定差错成果如图所示:
核算所得的MAPE均匀肯定百分比差错成果如图所示:
3.4.4 对查验数据进行可视化展现
对查验数据的可视化展现,因为练习数据和查验数据是相连的,所以首要将练习数据和查验数据的猜测值联合展现。 运转成果如下:
紧接着,将猜测值与查验数据进行比较,制作出如下的比较折线图和差错棉棒图,这里仅把RMSE均方根差错作为差错的展现项 运转成果如下图所示:
如上的剖析以及可视化成果来看,练习的模型对查验数据的拟合程度仍是适当不错的,在大致的趋势上能够看到猜测的作用与实践的作用是挨近共同的,从差错棉棒图中也能够看出来差错的规模大概在(-180,100)之间,所以说全体的拟合作用是不错的。
3.4.5 规范化猜测数据
用查验数据查验了模型拟合作用后,接下来应该对猜测数据做同样的规范化处理,然后将规范化过后的数据,作为输入数据输入到练习好的模型中进行猜测。
3.4.6 猜测将来的时刻步
紧接着就需求依据XTest猜测下一个时刻步的值,每次猜测时都需求更新网络状况,因为数据量不大,所以运转环境挑选cpu即可,最终循环 (猜测数据长度-1)次,依据XTest的数据,猜测出YTest_pred也便是2-end之间的数据
3.4.7 反规范化猜测数据并获取猜测数据的实在值
因为之前的输入数据是通过规范化的,所以取得的猜测数据也是规范化过后的数据,所以需求将猜测所得的值进行反规范化处理,转换成实践的猜测值。并获取好2-end的实在值,以方便后续的比较处理
3.4.8 对猜测数据进行可视化展现
首要需求将练习数据和查验数据拼接起来,制作榜首个图形,然后在此根底上,将猜测的值用赤色的折线制作出来,并定义好横纵坐标,图例的显示设置。 可视化成果如图所示:
紧接着需求将猜测数据独自拿出来与实践数据做一个对比,制作出猜测-实践的折线图,并制作二者之间的差错棉棒图,这里以RMSE作为体现差错项的目标。 可视化成果如图所示:
通过以上的猜测剖析能够看到,猜测值与实在值之间存在必定的差错,差错规模大概在[-200,200]之间,可是大致趋势上仍是吻合的。猜测差错较大的原因便是这个时刻段内,股市的动摇状况太大,导致依据前向的趋势猜测后向的数据的精度有必定程度的下降,可是从全体上来看咱们的猜测作用仍是不错的。
3.5 构建猜测差错表
通过以上的猜测成果,有表展现:
时刻 实在值 模型猜测值 猜测差错
2022年1月3日 4,796.56 4,796.56 0
2022年1月4日 4,793.54 4792.7681 -0.77193
2022年1月5日 4,700.58 4790.5269 89.94685
2022年1月6日 4,696.05 4756.9443 60.89434
2022年1月7日 4,677.02 4718.5068 41.48684
2022年1月10日 4,670.29 4685.3433 15.05326
2022年1月11日 4,713.07 4664.2129 -48.8571
2022年1月12日 4,726.35 4668.9238 -57.4262
2022年1月13日 4,659.02 4688.3735 29.35354
2022年1月14日 4,662.85 4687.6782 24.82822
2022年1月18日 4,577.34 4677.5229 100.183
2022年1月19日 4,532.76 4639.5654 106.8054
2022年1月20日 4,482.73 4586.6387 103.9087
2022年1月21日 4,397.93 4528.5640 130.634
2022年1月24日 4,410.13 4461.3511 51.22107
2022年1月25日 4,356.45 4415.1621 58.71211
2022年1月26日 4,349.93 4377.7480 27.81805
2022年1月27日 4,326.50 4353.9966 27.49658
2022年1月28日 4,431.85 4336.3853 -95.4647
2022年1月31日 4,515.55 4357.7056 -157.844
2022年2月1日 4,546.54 4415.2383 -131.302
2022年2月2日 4,589.32 4480.5474 -108.773
2022年2月3日 4,477.44 4540.4761 63.03608
2022年2月4日 4,500.54 4544.5249 43.9849
2022年2月7日 4,483.87 4526.2266 42.35656
2022年2月8日 4,521.54 4498.4497 -23.0903
2022年2月9日 4,587.18 4487.8281 -99.3519
2022年2月10日 4,504.06 4510.2500 6.19
2022年2月11日 4,418.64 4517.8618 99.22182
2022年2月14日 4,401.67 4489.9775 88.30754
2022年2月15日 4,471.07 4447.8252 -23.2448
2022年2月16日 4,475.01 4433.0283 -41.9817
2022年2月17日 4,380.26 4438.2500 57.99
2022年2月18日 4,348.87 4423.5049 74.63488
2022年2月22日 4,304.74 4393.5366 88.79662
2022年2月23日 4,225.50 4351.6133 126.1133
2022年2月24日 4,288.70 4293.0605 4.360547
2022年2月25日 4,384.62 4263.9351 -120.685
2022年2月28日 4,373.79 4287.3765 -86.4135
2022年3月1日 4,306.26 4326.0654 19.80543
2022年3月2日 4,386.54 4338.9795 -47.5605
2022年3月3日 4,363.49 4357.2905 -6.19947
2022年3月4日 4,328.87 4364.7124 35.8424
2022年3月7日 4,201.09 4354.0659 152.9759
2022年3月8日 4,170.62 4299.7788 129.1588
2022年3月9日 4,277.88 4232.2261 -45.6539
2022年3月10日 4,259.52 4212.3696 -47.1504
2022年3月11日 4,204.31 4218.1191 13.80914
2022年3月14日 4,173.11 4218.6426 45.53258
2022年3月15日 4,262.45 4206.0918 -56.3582
2022年3月16日 4,357.95 4216.2656 -141.684
2022年3月17日 4,411.67 4262.1948 -149.475
2022年3月18日 4,463.09 4327.2256 -135.864
2022年3月21日 4,461.18 4396.1255 -65.0545
2022年3月22日 4,511.61 4444.1680 -67.442
2022年3月23日 4,456.23 4481.2764 25.04637
2022年3月24日 4,520.16 4485.1626 -34.9974
2022年3月25日 4,543.04 4491.3242 -51.7158
2022年3月28日 4,575.52 4504.8560 -70.664
2022年3月29日 4,631.60 4528.9009 -102.699
2022年3月30日 4,602.45 4568.1245 -34.3255
第四章 结论
刚开端对时序数据的剖析仍是一个很懵懂的状况,然后通过查阅材料,知道了时序剖析是以剖析时刻序列的开展进程、方向和趋势,猜测将来时域或许到达的目标的办法。这运用了概率核算中时刻序列剖析原理和技能,运用时序体系的数据相关性,树立相应的数学模型,描绘体系的时序状况,以到达猜测未来的作用。而合适股票猜测的办法有很多种,例如移动均匀法、季节系数法、指数平滑法、自回归滑动均匀模型(ARIMA)、随机森林等等,可是在查找材料的进程中发现,长短期回忆网络在时序数据的剖析上有十分好的作用,传统的RNN在时序数据的剖析中有较好的作用,之所以会有较好的猜测作用是因为在 t时刻点时会将 t-1时刻点的隐节点作为当时时刻点的输入,这样有用的原因是因为之前时刻点的信息也用于核算当时时刻点的内容,可是传统的RNN却存在长时刻依靠以及梯度消失或爆破的问题,而LSTM的呈现正是对RNN的一种补充,他能很好地运用”门机制”来控制特征的流转和丢失,这使得它能处理RNN存在的问题并保存其优秀的时序剖析的能力。通过先从python股票猜测的LSTM的完成,再到matlab的编程完成,其间对LSTM的完成办法以及进程都通过了深化的了解,终究完成了依据LSTM模型的股票猜测。
可是仍旧存在一些的不足之处,比如在模型的优化上就无从下手,因为之前都是学习核算机视觉相关的图片辨认类的深度学习课程,关于这类问题的进步精度和优化的办法更为擅长。因为是榜首次接触时序数据的剖析,所以在优化方面难免有些不足。除了影响股票价格的要素很多导致某一时刻段的动摇状况比较剧烈以外,模型本身仍是有一些不足以及更大的优化空间的。所以在往后的学习中,我会努力学习而且深化研讨深度学习中的神经网络在金融,大数据,核算剖析等方面的运用,而且探寻能进步和优化算法的办法,以到达能更好、更高效地运用模型进行实践运用和操作的目的。
参考文献
[1] 张倩倩,林天华,祁旭阳,赵霞,依据机器学习的股票猜测研讨综述[J]. 河北省科学院学报,2020, 37(04):18-19.
[2] 隋金城.依据LSTM神经网络的股票猜测研讨[D].青岛科技大学,2020.
[3] 周阳.依据LSTM模型的上证综指价格猜测研讨[D].南京邮电大学,2019.
代码附录
1、数据预处理代码
2、数据可视化代码
3、加载数据集代码
4、练习数据,查验数据,猜测数据规范化代码
5、定义LSTM回归网络与练习选项
6、初始化网络,对查验数据进行猜测
7、核算RMSE,MAE,MAPE三大差错目标
8、可视化猜测成果及对比代码
9、对猜测数据进行猜测
10、制作猜测数据的猜测成果