原标题:AI 技术讲座精选:Python中使用LSTM网络进行时间序列预测
长短记忆型递归神经网络拥有学习长观察值序列的潜力。
它似乎是实现时间序列预测的完美方法,事实上,它可能就是。
在此教程中,你将学习如何构建解决单步单变量时间序列预测问题的LSTM预测模型。
在学习完此教程后,您将学会:
-
如何为预测问题制定性能基准。
-
如何为单步时间序列预测问题设计性能强劲的测试工具。
-
如何准备数据以及创建并评测用于预测时间序列的LSTM 递归神经网络。
让我们开始吧。
Python中使用长短期记忆网络进行时间序列预测
Matt MacGillivray 拍摄,保留部分权利
教程概览
这是一个大课题,我们将深入讨论很多问题。请做好准备。
该教程分为 9 节;它们分别为:
-
洗发水销量数据集
-
测试设置
-
持续性模型预测
-
LSTM数据准备
-
LSTM 模型开发
-
LSTM预测
-
完成LSTM 样本
-
得出稳定的结果
-
教程延伸
Python 环境
本教程假设您已安装 Python SciPy 环境。您在学习本教程时可使用 Python 2 或 3。
您必须使用 TensorFlow 或 Theano 后端安装 Keras(2.0或更高版本)。
本教程还假设您已安装 scikit-learn、Pandas、 NumPy 和 Matplotlib。
如果您在安装环境时需要帮助,请查看这篇文章:
-
如何使用 Anaconda安装机器学习和深度学习所需的 Python 环境
http://machinelearningmastery.com/setup-python-environment-machine-learning-deep-learning-anaconda/
洗发水销量数据集
该数据集描述某洗发水在3年内的月度销量。
数据单位为销售量,共有36个观察值。原始数据集由Makridakis、Wheelwright 和 Hyndman(1998)提供。
您可通过此链接下载和进一步了解该数据集:https://datamarket.com/data/set/22r0/sales-of-shampoo-over-a-three-year-period。
将该数据集下载至您当前的工作目录,并保存为“shampoo-sales.csv”。注意您可能需要删除 DataMarket 添加的脚注信息。
下方例子加载并生成已加载数据集的视图。
运行该示例,以 Pandas 序列的形式加载数据集,并打印出头5行。
然后生成显示增长持续性的序列线图。
洗发水月度销量数据集线图
试验测试设置
我们将把洗发水销量数据集分为两组:训练组和测试组。
前两年的销售数据将作为训练数据集,最后一年的数据将作为测试组。
例如:
使用训练数据集构建模型,然后对测试数据集进行预测。
我们将使用滚动预测的方式,也称为步进式模型验证。
以每次一个的形式运行测试数据集的每个时间步。使用模型对时间步作出预测,然后收集测试组生成的实际预期值,模型将利用这些预期值预测下一时间步。
例如:
这模拟了现实生活中的场景,新的洗发水销量观察值会在月底公布,然后被用于预测下月的销量。
最后,收集所有测试数据集的预测,计算误差值总结该模型的预测能力。采用均方根误差(RMSE)的原因是这种计算方式能够降低粗大误差对结果的影响,所得分数的单位和预测数据的单位相同,即洗发水月度销量。
例如:
持续性模型预测
对呈线性增长趋势的时间序列作出的准确的基线预测就是持续性化预测。
在持续性模型中,上一时间步(t-1)得到的观察值用于预测当前时间步(t)的观察值。
为了实现这一方法,我们可以从训练数据和步进验证积累的历史数据中收集上一次观察,然后用它来预测当前时间步。
例如:
我们将把所有预测累积在一个数组中,这样便可将它们与测试数据集进行直接比较。
洗发水