当前位置: 首页 > 后端技术 > Python

LSTM股市预测入门

时间:2023-03-26 13:11:11 Python

作者:宋彤彤相信很多人都会对股市数据的涨跌感到好奇,尤其想知道他们未来的走势是怎样的。最近看到一篇使用LSTM做初步股市预测的文章,分享给大家。1.LSTM神经元首先让我们来认识一下LSTM神经元:长期困扰传统神经网络架构的一个根本问题是对“信息”和“上下文”相互依赖的输入序列的解释。这里的“信息”可以是句子中的前一个词,以允许上下文预测下一个词可能是什么,或者它可以是序列的时间信息,以允许上下文对序列元素进行基于时间的预测。简而言之,传统的神经网络每次都被输入独立的数据向量,并且没有记忆的概念来帮助它们完成需要大量记忆的任务。解决此问题的早期尝试对网络中的神经元使用了简单的反馈型方法,其中输出被反馈到输入中以为最后看到的输入提供上下文。这些被称为递归神经网络(RNN)。虽然这些RNN在一定程度上起作用,但任何大规模使用RNN都会导致梯度消失的问题。这个问题使得RNN不适用于大多数现实世界的问题,因此需要找到上下文存储的另一种解决方案。这就是长短期记忆(LSTM)神经网络派上用场的地方。与RNN神经元一样,LSTM神经元将上下文存储在其管道中,以解决顺序和时序问题,而不会出现影响其性能的梯度消失问题。对于上下文,下图是LSTM神经元的典型内部工作图。它由多个层和逐点操作组成,充当数据输入、输出和遗忘门以通知LSTM单元状态。这种细胞状态是维持网络及其输入的长期记忆和上下文的东西。2.几种预测方法第一种是逐点预测,即我们一次只预测一个点,绘制这个点,然后用刚刚预测的点的真实数据填充下一个窗口数据和预测下一个点。这种正弦波预测方法会呈现这样的图像:第二种是全序列预测,我们只用第一部分训练数据初始化一次训练窗口。然后模型预测下一个点,我们像逐点预测一样移动窗口。不同的是,我们使用之前预测中预测的数据进行预测。在第二步中,这意味着只有一个数据点(最后一个点)来自之前的预测。在第三个点的预测中,最后两个数据点将来自之前的预测,依此类推。在50次预测之后,我们的模型将完全根据自己之前的预测进行预测。这使得我们可以使用模型提前预测很多未来的时间点,但是由于它预测的预测反过来又可以基于预测,这会增加我们预测的错误率。随着我们对未来做出越来越多的预测,误差范围会随着先前预测中的错误在用于未来预测时越来越大而增加。这种做正弦波预测的方法呈现出这样的画面:第三种是多序列预测,它是全序列预测的混合体,因为它仍然用真实数据初始化测试窗口,预测下一个点,然后使用那个预测点创建一个新窗口。但是一旦它达到输入窗口完全由过去的预测点组成的状态,它就会停止,用真实数据重置窗口,然后再次开始该过程。从本质上讲,这提供了对数据的多个趋势线预测,以便能够分析模型能够在多大程度上获得未来的动量趋势。3.不那么简单的股市数据我们可以使用逐点估计来准确预测数百个正弦波阶跃。但是我们不能把这种方法应用到股票市场上,因为现实世界并没有那么简单。与正弦波不同,股票市场时间序列不是任何可以映射的特定静态函数。描述股票市场时间序列运动的最佳属性是随机游走。作为一个随机过程,真正的随机游走没有可预测的模式,因此尝试对其建模是毫无意义的。幸运的是,许多方面都在争论股市不是一个纯粹的随机过程,这让我们能够从理论上推断股市时间序列可能有一些隐藏的模式。正是由于这些潜在的隐藏模式,研究股票市场中的LSTM深度网络才有意义。股市数据依次涉及开盘价、最高价、最低价、收盘价和每日成交量。它是多维的。如果我们只以收盘价作为输入进行一维模型预测,分别使用以上三种预测方式,会得到如下结果:逐点预测:序列预测:多序列预测:从以上对比结果,我们可以看出:用逐点预测的方式跑数据,可以和真实数据非常吻合。但这有点自欺欺人。由于预测线由单个预测点组成,这些预测点基于真实数据的整个先前历史窗口。因此,网络不需要对时间序列本身了解太多,除了每个下一个点都不会离上一个点太远。即使它预测了一个错误的点,下一次预测也会考虑真实的历史而忽略不正确的预测,然后再次允许错误发生。虽然这听起来可能无法准确预测下一个价格点,但它确实有一些重要用途,例如准确预测下一个价格范围或应用于异常检测。全系列预测,似乎是对此类时间序列最无用的预测(至少对于使用这些超参数训练的模型而言)。我们可以看到预测最初略有波动,其中模型遵循某种动量,但很快模型收敛到时间序列的某个均衡值。这对于预测股票价格变动似乎没有多大价值,但均值回归交易者可能会认为该模型找到了价格序列的均值。对于多序列预测,网络似乎可以正确预测绝大多数时间序列的趋势(和趋势幅度)。虽然并不完美,但它确实证明了LSTM深度神经网络对于顺序和时间序列问题的有用性。通过仔细的超参数调整当然可以实现更高的准确性。接下来,我将使用两个输入维度来训练模型:收盘价和交易量,结果如下:可以看到两个输入维度可以使输出预测更加精细。预测趋势线似乎更准确地预测即将到来的小幅下跌,不仅从盛行趋势开始,趋势线的准确性似乎也在这种情况下有所提高。4.总结目前使用基础LSTM存在一定的局限性,尤其是在使用金融时间序列时,序列本身具有非平稳特性难以建模(虽然在使用贝叶斯深度神经网络方法求解过程中已经在稳定性方面做了)。同样对于某些应用程序,已经发现基于注意力的神经网络机制的新进展优于LSTM(并且LSTM与这些基于注意力的机制相结合已经超越了自己)。这里提供本文的项目地址和一些参考资料,有兴趣的同学可以进一步探索。项目源码地址:https://momodel.cn/explore/5d6b22c5c7e247a961bc8084?type=app**5。参考博客:https://www.altumintelligence.com/articles/a/Time-Series-Prediction-Using-LSTM-Deep-Neural-Networks视频数据:https://www.youtube.com/watch?v=2np77NOdnwk[](http://savefrom.net/?url=http...论文:LSTM,1997https://www.bioinf.jku.at/publications/older/2604.pdfAboutUsMo(URL:https://momodel.cn)是一个支持Python的人工智能在线建模平台,可以帮助您快速开发、训练和部署模型。Mo人工智能俱乐部是由人工智能在线建模平台(网址:https://momodel.cn)的研发和产品团队发起,致力于降低人工智能开发和使用门槛的俱乐部。团队拥有大数据处理分析、可视化和数据建模经验,承接过多领域智能化项目,具备从底层到前端的全线设计开发能力。主要研究方向为大数据管理分析和人工智能技术,并以此促进数据驱动的科学研究。目前团队每两周(周六)在杭州举办一次线下沙龙,分享机器学习相关的论文和学术交流。我们希望把对人工智能感兴趣的各界朋友聚集在一起,继续交流,共同成长,推动人工智能的大众化和普及化。