⽤Python的长短期记忆神经⽹络进⾏时间序列预测⽤Python的长短期记忆神经⽹络进⾏时间序列预测
长短期记忆递归神经⽹络具有学习长的观察序列的潜⼒。
这对于时间序列预测似乎⾮常不错,并且事实的确可能是这样的。
在本教程中,你将了解,如何对于⼀个⼀步单变量时序预测问题开发⼀个LSTM预测模型。
完成本教程后,您将知道:
如何为预测问题制定性能基准。
海边
如何为⼀步时间序列预测设计⼀个强⼤的测试框架。
如何准备数据,开发和评估⽤于时间序列预测的LSTM递归神经⽹络。有福气的女人面相
让我们开始吧。
更新于2017年5⽉:修复了invert_scale()函数中的错误,谢谢Max。
更新于2017年5⽉
教程概述
这是⼀个很⼤的话题,我们的教程将会覆盖很多内容,快准备好吧!
怎么查qq密码本教程分为9个部分; 他们是:
洗发⽔销售额数据集
测试设置
持续性模型预测
LSTM数据准备
LSTM模型开发
LSTM预测
完整的LSTM例⼦
开发稳健的结果
教程扩展
Python环境
本教程假设您已经安装了Python SciPy环境。本教程可以使⽤Python 2或3。
您必须安装了Keras(2.0或更⾼版本)和TensorFlow或Theano其中⼀个的后端
本教程还假设您已经安装了scikit-learn,Pandas,与NumPy和Matplotlib库
如果你的环境需要帮助,请看这个帖⼦:
洗发⽔销售数据集
该数据集描述了3年期间洗发剂的⽉销售额。
这些单位是⼀个销售计数,有36个观测值。原始数据集归功于Makridakis,Wheelwright和Hyndman(1998)。
。
将数据集下载到当前⼯作⽬录,名称为“ shampoo-sales.csv ”。请注意,您可能需要删除DataMarket添加的页脚信息。下⾯的⽰例加载数据并绘制被加载的数据集的图形。
# load and plot datat
from pandas import read_csv
from pandas import datetime
from matplotlib import pyplot
# 加载数据集
def parr(x):
return datetime.strptime('190'+x,'%Y-%m')
ries =read_csv('shampoo-sales.csv', header=0, par_dates=[0], index_col=0, squeeze=True, date_parr=parr)
# 总结第⼀⾏
print(ries.head())
# 绘制折线图
绝地求生优化ries.plot()
pyplot.show()
运⾏该⽰例将数据集加载为Pandas系列并输出前5⾏。
Month
1901-01-01266.0
徐州博物馆1901-02-01145.9
1901-03-01183.1
1901-04-01119.3
1901-05-01180.3
Name: Sales, dtype: float64
然后创建系列的折线图,显⽰出明显的增长趋势。
洗发⽔⽉销售量折线图
实验测试设置
我们将洗发⽔销售数据集分为两部分:训练集和测试集。
前两年的数据将⽤于训练数据集,剩余的⼀年数据将⽤于测试集。
例如:
# 将数据分为训练和测试两部分
X = ries.values
train, test = X[0:-12], X[-12:]
我们将通过使⽤训练集来开发模型并在测试集上做出预测。
滚动预测,也称为前向模型验证,在这⾥将会被⽤到。
测试集的每个时间步都会被同⼀个预测模型预测⼀次。然后测试集中每⼀个实际值都会被取出给预测模型使⽤,即对下⼀个时间步做出预测。
青春是一首歌例如:
# 前向验证
history =[x for x in train]
predictions =list()
for i in range(len(test)):
# 作出预测...
这模拟了⼀个真实世界的情景,每个⽉都有新的洗发⽔销售额产⽣,并⽤于下个⽉的预测。
最后,将收集关于测试数据集的所有预测,并计算误差分数以总结模型的性能。计算将使⽤均⽅根误差(RMSE),因为它会惩罚较⼤的错误,并得出与预测数据相同单位的分数,即⽉度洗发⽔销售额。
例如:
ics import mean_squared_erro爱情心理测试
rm =sqrt(mean_squared_error(test, predictions))
print('RMSE: %.3f'% rm)
持续性模型预测
持续性预测模型对于带有线性增长趋势的时间序列是⼀个好的基准预测。
持续性预测是使⽤前⼀时间步(t-1)的观测值预测当前时间步(t)的观测值。
我们可以通过从训练数据和历史积累的历史数据中获取最后⼀个观测数据,并⽤它预测当前的时间步长来实现这⼀点。
例如:
# make prediction
yhat = history[-1]
我们将把所有的预测结果累加到⼀个数组中,以便将它们直接与测试数据集进⾏⽐较。
下⾯列出了如何⽤持续性模型预测洗发⽔销售数据集的完整⽰例。
from pandas import read_csv
from pandas import datetime
爱的怒放ics import mean_squared_erro
from math import sqrt
from matplotlib import pyplot
# 加载数据集
def parr(x):
return datetime.strptime('190'+x,'%Y-%m')
ries =read_csv('shampoo-sales.csv', header=0, par_dates=[0], index_col=0, squeeze=True, date_parr=parr) # 将数据分为训练和测试两部分
X = ries.values
train, test = X[0:-12], X[-12:]
# 前向验证
history =[x for x in train]
predictions =list()
for i in range(len(test)):
# 作出预测
predictions.append(history[-1])
# 测试集中的观测值
history.append(test[i])
# 报告性能
rm =sqrt(mean_squared_error(test, predictions))
print('RMSE: %.3f'% rm)
# 绘制观测值和预测值对⽐的折线图
pyplot.plot(test)
pyplot.plot(predictions)
pyplot.show()
运⾏该⽰例将基于测试数据集输出预测模型的RMSE,等于约136.
RMSE:136.761
还会创建测试数据集(蓝⾊)与预测值(橙⾊)的折线图,显⽰了⽂中持续性预测模型的效果。
洗发⽔销售数据集的观测值和持续性模型预测值的对⽐
有关时间序列预测的持续性模型的更多信息,请参阅此⽂章:
现在我们已经有了数据集的性能基准,我们可以开始为数据开发⼀个LSTM模型