股票内外比它采取最后一个长短期记忆单元的输出正在本文中,你将看到何如利用一个被称为是非时追念的时期序列模子。LSTM模子很强健,更加是正在保存恒久追念方面。正在本文中,你将处分以下焦点。
你盼望对股票代价实行确切的修模,是以动作一个股票买家,你能够合理地确定何时买入股票,何时卖出股票以取得利润。这即是时期序列模子的用意。你须要好的机械进修模子,它能够考核持续串数据的汗青,并确切预测该序列的另日数据。
提示:股票商场的代价是高度弗成预测和震动的。这意味着数据中没有划一的形式,使你可能近乎完整地模仿股票代价随时期蜕化。
然而,咱们不要一味地以为这只是一个随机的或者随机的进程,机械进修没有盼望。咱们起码对数据实行修模,做出的预测与数据的实践行动相干。换句话说,你不须要另日实在的股票价格,而是须要股票代价的调动(也即是说,倘使它正在不久的改日会上涨或下跌)。
你要运用航空公司的股票商场代价来实行预测,是以你把股票代码修树为 AAL。另外,你还界说了一个url\_string,它将返回一个JSON文献,个中包罗航空公司过去20年的悉数股市数据,以及一个file\_to_save,它是你存在数据的文献。
接下来,指定条款:倘使你还没有存在数据,从你正在url\_string中修树的URL中抓取数据;把日期、低点、高点、成交量、收盘价、开盘价存储到一个pandas DataFrame df中,把它存在到file\_to_save。
# 将日期、低点、高点、成交量、收盘价、开盘价存储到Pandas DataFrame中
正在这里你将把搜罗的数据输出到DataFrame中。你还应当确保数据是按日期排序的,由于数据的循序正在时期序列修模中至合紧急。
这张图仍旧阐发了良众题目。我拣选这家公司而不是其他公司的缘由是,这张图跟着时期的推移,股票代价有区别浮现行动。这将使模子进修愈加妥当,而且给你一个代价蜕化来测试对百般情状的预测有众好。
另一个须要谨慎的是,亲昵2017年的数值要比亲昵20世纪70年代的数值高得众,并且震动也大。所以,你须要确保数据正在统统时期局限内浮现为仿佛的代价局限,须要将数据尺度化。
现正在你能够把熬炼数据和测试数据离开。熬炼数据将是时期序列的前4000个数据点,其余的将是测试数据。
现正在你须要界说尺度化来楷模数据。将熬炼和测试数据蜕化为[data\_size, num\_features]的维度。
因为你先前的考核,即区别时期段的数据有区别的值局限,通过将全序列肢解成窗口来尺度化数据。倘使你不如许做,早期的数据将亲昵于0,对进修进程不会有太大的价格。这里你拣选了一个800的窗口巨细。
提示:正在拣选窗口巨细时,不要太小,由于当你实行窗口尺度化时,会正在每个窗口的最末尾引入一个断点,由于每个窗口都是独立尺度化的。
均匀法应允你通过将另日的股票代价吐露为以前考核到的股票代价的均匀值来实行预测(凡是是提前一个时期步)。下面看两种均匀技艺;尺度均匀法和指数转移均匀法。你将对这两种算法爆发的结果实行定性(目测)和定量(均匀平方偏差)的评估。
均匀平方偏差(MSE)的算计办法是:取前一步的可靠值和预测值之间的平方偏差,并对悉数的预测值实行均匀。
能够通过起初测试将其动作一个均匀算计题目的模子来会意这个题目的难度。起初,测试预测另日的股票商场代价(比方,xt+1),动作一个固定巨细的窗口(比方,xt-N,...,xt)(比方之前的100天)内先前考核到的股票商场代价的均匀值。以后,测试更高级的 指数转移均匀 办法,看看它的功效何如。然后,进入是非期追念模子
看一下下面的均匀结果。它与股票的实践行动相当亲昵。接下来,你将看到一个更确实的一步预测办法。
类似看待十分短的预测(提前一天)来说,这个模子还不算太差。鉴于股票代价不会正在一夜之间从0蜕化到100,这种行动是合理的。接下来,利用指数转移均匀线。
你或者仍旧正在互联网上看到少少作品,利用十分丰富的模子,并预测了简直确实的股票商场行动。可是请谨慎! 这些只是视觉上的错觉,并不是因为学到了有效的东西。你将不才面看到何如用一个大略的均匀法来复制这种行动。
上述公式根本上是算计t+1时期步长的指数转移均匀线,并将其动作超前一步的预测。γ确定比来的预测对EMA的奉献是什么。比方,γ=0.1只可获得此刻值的10%进入EMA。由于你只取比来的一小个人,它应允保存你正在均匀数中很早看到的更早的值。请看下面用于预测向前一步的情状。
拟合结果很好,屈从可靠的漫衍(而且由十分低的MSE证据)。实践上,仅凭第二天的股票商场代价是没蓄志义的。就我一面而言,我思要的不是第二天的实在股时值格,而是另日30天的股时值格是上涨仍旧下跌。测试如许做,你会发觉EMA办法的缺陷。
现正在测试正在窗口中实行预测(例如你预测另日2天的窗口,而不是仅仅预测另日一天)。然后你会认识到EMA会有众大的偏差。下面是一个例子。
是以,无论你对另日实行众少步预测,你城市正在悉数另日的预测步中延续获得相似的谜底。
你有一个处分计划,能够输出有效的讯息,即是看看基于动量的算法。它们遵循过去比来的数值是上升仍旧低重(不是确实的数值)实行预测。比方,它们会说第二天的代价或者会消重,倘使过去几天的代价平素不才降,这听起来很合理。然而,咱们利用一个更丰富的模子:LSTM模子。
这些模子仍旧正在时期序列预测界限十分热门,由于它们正在时期序列数据的修模方面十分增色。你将看到数据中是否真的藏匿有你能够运用的形式。
是非期追念模子是极其强健的时期序列模子。它们能够预测另日自便步。LSTM模块(或单位)有5个根本构成个人,使其可能对恒久和短期数据实行修模。
单位状况(ct)--这代外了单位的内部追念,它同时存储了短期追念和恒久追念
_藏匿状况_(ht)--这是遵循此刻输入、以前的_藏匿状况_和此刻的单位输入算计出来的输出状况讯息,你最终会用它来预测另日的股时值格。另外,藏匿状况能够确定只检索存储正在单位状况中的短期或恒久或两品种型的追念来实行下一次预测。
遗忘门(ft)--确定有众少来自此刻输入和前一个单位状况的讯息流入此刻单位状况
输出门(ot)--确定众少讯息从此刻单位状况流入藏匿状况,所以,倘使须要,LSTM能够只挑选恒久追念或短期追念和恒久追念。
TensorFlow为完毕时期序列模子供给了一个不错的API(称为RNN API)。
你起初要完毕一个数据天生器来熬炼你的模子。这个数据天生器将有一个名为.unroll\_batches(...)的办法,它将输出一组依序取得的num\_unrollings批次的输入数据,个中一个批次的数据巨细为[batch_size, 1]。那么每一批输入数据城市有一个相应的输出数据批。
数据加强(_Data_ _Augmentation_)又称为数据增广。其余,为了使你的模子妥当,你不会让x\_t的输出老是x\_t+1。相反,你将从x\_t+1,x\_t+2,...,xt+N的集中中随机抽取一个输出,个中N是一个小窗口巨细。
正在本节中,你将界说几个超参数。D是输入的维度。这很大略,由于你把之前的股票代价动作输入,并预测下一个股票代价,这应当是1。
然后你有num\_unrollings,这是一个与用于优化LSTM模子的通落伍期的反向宣扬(BPTT)相合的超参数。这吐露你正在一个优化步调中研讨众少个一口气的时期步调。能够以为,不是通过查看单个时期步调来优化模子,而是通过查看num\_unrollings时期步调来优化收集。越大越好。
然后,你有batch_size。批量巨细是指正在一个时期步长中研讨众少个数据样本。
接下来你界说num_nodes,它代外每个单位中藏匿神经元的数目。你能够看到,正在这个例子中,有三层LSTMs。
接下来你要为熬炼输入和标缔结义占位符。你有一个输入占位符的列外,个中每个占位符都包罗一个批次的数据。而列外中有num_unrollings占位符,这些占位符将被一次性用于一个优化步调。
你将有三层LSTM和一个线性回归层,用w和b吐露,它采用末了一个是非期追念单位的输出,并输出下一个时期步调的预测。另外,你能够让dropout完毕LSTM单位,由于它们能够升高功能,节减过拟合。
正在这一节中,你起初创修TensorFlow变量(c和h),这些变量将仍旧是非时追念单位的状况和藏匿状况。然后,你将熬炼输入的列外转换为[unrollings, batch\_size, D]的样式。然后用ynamic\_rnn函数算计LSTM输出,并将输出肢解成num张量列外。
# 做几次张量转换,由于函数dynamic_rnn恳求输出务必是一种特定的体式。
现正在,要算计吃亏。看待每一批预测和可靠输出,都要算计出均匀平方偏差。而你把悉数这些均方差吃亏加正在一同(不是均匀)。末了,界说你要利用的优化器来优化神经收集。正在这种情状下,你能够利用Adam,它是一个十分新的、浮现杰出的优化器。
# 正在算计吃亏时,你须要谨慎确实的式子,由于你算计的是悉数未滚动的步的吃亏
正在这里,你界说了预测相干的TensorFlow操作。起初,界说一个用于输入的占位符(sample\_inputs),然后与熬炼阶段仿佛,你界说预测的状况变量(sample\_c和sample\_h)。末了,你用dynamic\_rnn函数算计预测结果,然后通过回归层(w和b)发送输出。你还应当界说reset\_sample\_state操作,它能够重置单位状况和藏匿状况。
正在这里,你将熬炼并预测几个历时的股票代价走势,并考核预测结果是否跟着时期的推移而变得更好或更差。
正在时期序列上界说一个测试开始集(test\_points\_seq)来评估模子。
一口气实行n\_predict\_once步调的预测,将之前的预测动作此刻输入。
算计预测的n\_predict\_once点与这些时期戳的可靠股票代价之间的MSE吃亏
你能够看到MSE吃亏是何如跟着熬炼量的增众而低重的。这是一个好兆头,讲明模子正正在进修少少有效的东西。你能够将收集的MSE吃亏与你做尺度均匀时获得的MSE吃亏(0.004)实行对比。你能够看到,LSTM比尺度均匀法做得更好。并且你显露,尺度均匀法(固然不完整)合理地屈从了可靠的股票代价调动。
固然不完整,但LSTM类似可能正在大大都时期确切预测股票代价行动。请谨慎,你所做的预测大致正在0和1.0的局限内(也即是说,不是可靠的股票代价)。这不要紧,由于你预测的是股票代价的走势,而不是代价自己。
正在本教程中,起初先容了你为什么须要为股票代价修模的动机。接着是评释数据。然后两种均匀技艺,它们应允你对另日一步实行预测。接下来你看到,当你须要预测凌驾一步的另日时,这些办法是无用的。以后,筹议了何如利用LSTM来实行另日众步的预测。末了,将结果可视化,看到模子(固然不完整)正在确切预测股票代价走势方面相当增色。
股票代价/走势预测是一项极其贫寒的职业。我一面以为,不应当把任何一个股票预测模子视为理所当然,盲目地依赖它们。然而模子或者正在大大都时期可能确切预测股票代价走势,但不老是这样。
不要被外面那些显示预测弧线与可靠股票代价统统重合的作品所诱惑。这能够用一个大略的均匀技艺来复制,正在推行中它是没有效的。更明智的做法是预测股票代价的调动。
该模子的超参数对你取得的结果十分敏锐。所以,要做的一件十分好的事务是对超参数运转少少超参数优化技艺(比方,网格搜寻/随机搜寻)。下面我列出了少少最要害的超参数