ARIMA时间序列与LSTM神经网络的PK
前言:时间序列算是我接触的第一个统计学实践项目,也是它把我带进了机器学习的大门。当时的我的工作是根据过往投资和赎回量,每天预估一个需要留的钱,有点类似银行准备金。我本想自己写个代码,无奈能力不足,最后让算法工程师帮我写了一套,每天预测准确率大约90%。回头过了1年多我现在都不会,当时肯定写不出来了。
正好这周末学习统计预测,上课老师讲的是ARIMA模型为主,不过老师也说了目前要更高的准确率推荐神经网络。正好我也查到了神经网络相关代码,尝试做一个ARIMA与神经网络结果比对。同时也是为了十月有一个预测比赛打基础。
ARIMA模型
#导入下载的数据w<-read.table("F:/ML/习题数据、案例数据、R代码/data/i.csv",sep=",",header = T);x<-ts(w$high,start=c(2017,4,5),frequency = 365);plot(x);#对差分序列性质考察plot(diff(x))acf(diff(x))pacf(diff(x))#这个例子用的ARIMA(5,1,2),也可以用auto.arima来建立模型x.fit<-arima(x,order= c(5,1,2))x.fitfor (i in 1:2) print(Box.test(x.fit$residual,lag=6*i))x.fore<-forecast(x.fit,h=5)x.foreplot(x.fore)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