【发布时间】:2021-11-09 17:37:50
【问题描述】:
我正在尝试预测具有多变量输入和多输出的时间序列(多步预测)。
由于我的一些输入特征对于未来的时间步长是已知的,而其他的则不是,自然包括目标变量本身,我面临的问题是输入不适合 LSTM 所需的 3-D 形状。我尝试了不同的方法来处理这个问题。
似乎工作得很好的是在所有特征都已知的情况下在最后一天拆分数据并构建两个不同的 3-d 输入。
input_past 是一个形状为 (x, y1, z1) 的矩阵,其中
x:记录数
y1:上下文窗口(在 lstm 层中使用的时间步长)
z1:特征计数
input_future 是一个形状为 (x, y2, z2) 的矩阵
x:记录数
y1:预测的时间步长
z1:未来时间步长已知的特征计数
input_past 被传递到 LSTM 层,输入 future 到 Dense 层。之后这些层会被连接和致密化。
结果相当不错,并且在某些情况下优于其他不同的模型,包括 naive 模型、lightgbm 模型和 arima 模型。这引出了我的两个问题:
- 所描述的模型是否合理,或者是否有更好的方法来处理使用 LSTM 进行时间序列预测中部分已知的未来特征?
- NN 的结果是不确定的。如上所述,该模型能够胜过其他不同的方法,但并非每次都评估模型。使用完全相同的配置在相同输入上评估模型可能会导致预测性能大不相同。结果可能从最佳分数(MAPE ~10%,RMSE ~60k)到(MAPE ~30%,RMSE ~200k)不等。我无法让我的模型在每次运行时都收敛到几乎最好的分数。我尝试了几乎所有的方法,从改变 ADAM 优化器的学习率(甚至是指数衰减计划)到使网络更深和/或更宽,或者尝试使用 batch_size 或不同的层初始权重模式。唯一使分数更可靠的是增加优化器的 epsilon 参数,但这会导致预测性能非常差。由于同一模型多次运行的得分不同,我怎么知道我的模型的哪个版本最适合在生产中使用?
任何帮助将不胜感激,因为我是一个使用 keras 的新手。
【问题讨论】:
标签: machine-learning keras time-series forecasting