当前位置 : 主页 > 网络编程 > 其它编程 >

lstm原理及实现_ARIMA时间序列与LSTM神经网络的PK

来源:互联网 收集:自由互联 发布时间:2023-07-02
点击上方“趣味数据周刊”关注公众号文章期号201901007方法对比显优劣前言时间序列算是我接触的第一个统计学实践项目也是它把我带进 点击上方“趣味数据周刊”关注公众号文章期号
点击上方“趣味数据周刊”关注公众号文章期号201901007方法对比显优劣前言时间序列算是我接触的第一个统计学实践项目也是它把我带进 点击上方“趣味数据周刊”关注公众号文章期号201901007方法对比显优劣前言时间序列算是我接触的第一个统计学实践项目也是它把我带进了机器学习的大门。当时的我的工作是根据过往投资和赎回量每天预估一个需要留的钱有点类似银行准备金。我本想自己写个代码无奈能力不足最后让算法工程师帮我写了一套每天预测准确率大约90%。回头过了1年多我现在都不会当时肯定写不出来了。正好这周末学习统计预测上课老师讲的是ARIMA模型为主不过老师也说了目前要更高的准确率推荐神经网络。正好我也查到了神经网络相关代码尝试做一个ARIMA与神经网络结果比对。同时也是为了十月有一个预测比赛打基础。一、ARIMA模型

ARIMA模型于1982年提出是时间序列预测分析方法之一。ARIMA(pdq)中AR是"自回归"p为自回归项数MA为"滑动平均"q为滑动平均项数d为使之成为平稳序列所做的差分次数(阶数)。后面ARIMA模型我是用R语言来实现的。第一步安装包主要用到forecast需要下载以便预测。第二步下载导入数据这里以最近两年ICBC的的历史股票行情为例。数据是2017年4月5日至2019年9月20日每天股票最高价。根据以往数据预测9月23日至9月27日ICBC股价(最高价)下载数据可见后文lstm模型开头有下载办法。

#导入下载的数据wxplot(x);第三步对差分序列性质进行考察

#对差分序列性质考察plot(diff(x))acf(diff(x))pacf(diff(x))结果如下图7a9353a1a771059f3e22bea1a33bc8c1.png1c0f601c8a351c9cf028285e4246dece.png第四步水平相关信息提取拟合ARIMA(5,1,2)模型

#这个例子用的ARIMA(512)也可以用auto.arima来建立模型x.fitx.fit第五步残差白噪声检验

for (i in 1:2) print(Box.test(x.fit$residual,lag6*i))a17e82292b992087bc85947c55b504fe.png输出的P值还不错。第六步水平预测并绘制预测图

x.forex.foreplot(x.fore)3f4f50980ff3929b9670be4318545064.png这里 Point Forecast 一列就是对未来5天的预测结果。而后面Lo 80、Hi 80组成的区间意思是有80%的落在区间内。95%同理。da60f7b7fa548fcab8b93131704b826d.png可以看到ARIMA预测结果是稳中有升这和实际9月23日至9月27日ICBC股价(最高价)走势也相似。二、LSTM模型

LSTM(长短期记忆网络)模型首次提出是在1997年是在RNN上的一个拓展。更为广为人知的神经网络RNN有一个缺点就是容易遗忘最开始输入的内容而LSTM采用长短记忆的方法有效解决这一问题。在2014年之后随着RNN的普及发展LSTM也有了更广泛的发展应用。明显相比上世纪就已经成熟的ARIMA模型LSTM更加新颖效果好但是暂时还没有编写到课本里面。关LSTM模型具体介绍网上和知乎上的介绍很多理论方面就不多赘述了下面直接说我的实战代码。这里我用的pytorch 1.1版本来实现LSTM。

第一步导入必要包

import pandas as pdimport matplotlib.pyplot as pltimport datetimeimport osimport torchimport torch.nn as nnimport numpy as npfrom torch.utils.data importDataset, DataLoader第二步利用tushare包去下载最近两年ICBC的的历史股票行情b6b8144e744b2369a24cffff23267e84.png第三步数据预处理150875ce569d3823670a95bab8233f24.png第四步创建LSTM层和超参数42fccf68d581511dfdf9efdf9db11bab.png4111574f08c078715b1c97de13c095a1.png第五步万事俱备可以输出了9f4fc59fb39809eb9dd498370a6f76e8.png5.645258, 5.5933948, 5.5533557, 5.527862 , 5.536109则为LSTM预测的ICBC 2019年9月23日至9月27日的股价。三、 ARIMA与LSTM预测结果对比1、工行股价预测值与真实值对比工行股价LSTM预测值ARIMA预测值实际值2019/9/235.6452585.5337115.522019/9/245.5933955.5391335.522019/9/255.5533565.5458865.522019/9/265.5278625.5482255.562019/9/275.5361095.5430765.58196efb6cf1d797589959d62750836457.png2、外币对美元日兑换率预测值与真实值对比外币对美元日兑换率LSTM预测值ARIMA预测值实际值1998/12/241.7980391.6752391.6841998/12/251.7218411.6752171.67931998/12/261.6964601.6754751.67071998/12/271.6925241.6754661.67651998/12/281.6903211.6755801.667332e7bc7dc7cf2a547892a5a52a72cf2.png3、沪深300指数交易额预测值与真实值对比沪深300指数交易额LSTM预测值ARIMA预测值实际值2015/6/152,588,3794,355,6964,757,4572015/6/164,153,0694,388,0634,116,7562015/6/174,214,3584,298,7993,971,2422015/6/183,886,3554,413,3173,643,9582015/6/194,167,3794,582,9953,581,047e8501017f68e4d2e2249698d8901df34.png例1和例2的真实值波动比较小例3的数据波动比较大。例1例2是ARIMA更接近真实值例3除了第一天结果LSTM差距较大剩下四天都是LSTM的预测结果更接近。从结果来看当数据波动不大时用ARIMA模型比LSTM要更好。而当数据变化比较大时ARIMA的预测效果就不如LSTM了。个人理解ARIMA原理时滑动平均和自回归所以预测的结果都和历史的平均值比较接近当真实值波动不是很剧烈是用ARIMA预测可能更适用。而神经网络LSTM由于对于过往数据都会存到‘记忆神经’也就是遗忘门输入门输出门中。也就不是只简单看一个平均所以预测可能会激进偏颇一点但是对于原始数据波动比较大时可能效果更好。简单的结论就是原始数据波动不大(例如稳定股票每天价格汇率等)建议用ARIMA模型。原始数据波动较大(例如每天成交额购买额)建议用神经网络预测效果更好。后续记得原来单位的高手用神经网络时先做一个标记把所有假期周末标记出来再训练预测这样的效果肯定比我直接用更好。个人感觉我在ARIMA与LSTM的代码水平需要进一步提升可能结论效果更有说服力下一步要继续努力吧。推荐阅读探索时间序列预测未来《哪吒之魔童降世》异化让人成魔一个公式缓解 你99%的蕉绿49a4339e3ef1b518dd522c02a9d8a758.png

上一篇:探讨Mysql中OPTIMIZETABLE的作用详解_MySQL
下一篇:没有了
网友评论