一、自回归LSTM(ARLSTM)
ARLSTM是由 Google Deep-Mind 构建的,用于创建WaveNet(一种生成原始音频序列的模型)。在时间序列的背景下,允许预测具有不同尺度的时间序列,如小时、天或月,同时避免不得不重新训练一个新模型。它的缺点是错误的积累,由于预测和实际值之间总是存在一些差异,在ARLSTM中随着反馈回模型而累积,这意味着后来的预测会比先前的预测有更大的误差。
二、ARLSTM的使用
1、ARLSTM模型类封装
ARLSTM模型主要包括三层,首先第一层位LSTMCell,其具备访问如状态和预测等更细力度的信息,然后是第二层RNN层,训练上一层LSTMCell的结果,最后将输出通过第三层Dense层进行数据预测。下面将该模型封装至AutoRegressive类,该类同样继承自Keras中的Model 类。
class AutoRegressive(Model):
def __init__(self, units, out_steps):
super().__init__()
self.out_steps = out_steps
self.units = units
self.lstm_cell = LSTMCell(units)
self.lstm_rnn = RNN(self.lstm_cell, return_state=True)
self.dense = Dense(train_df.shape[1])
由于每轮的预测会继续作为输入反馈至模型中继续生成预测,因此在AutoRegressive类中需要定义一个单独的方法获取之前的预测。
def warmup(self, inputs):
x, *state = self.lstm_rnn(inputs)
prediction = self.dense(x)
return prediction, state
通过上述两个函数,具备了ARLSTM基本框架以及过去预测获取的能力,最后只需定义call函数,让Keras隐式调用,从而时序循环生成预测。
def call(self, inputs, training=None):
predictions = []
prediction, state = self.warmup(inputs)
predictions.append(prediction)
for n in range(1, self.out_steps):
x = prediction
x, state = self.lstm_cell(x, states=state, training=training)
prediction = self.dense(x)
predictions.append(prediction)
predictions = tf.stack(predictions)
predictions = tf.transpose(predictions, [1, 0, 2])
return predictions
2、生成预测与MAE结果比对
AR_LSTM = AutoRegressive(units=32, out_steps=24)
history = compile_and_fit(AR_LSTM, multi_window)
ms_val_performance['AR - LSTM'] = AR_LSTM.evaluate(multi_window.val)
ms_performance['AR - LSTM'] = AR_LSTM.evaluate(multi_window.test, verbose=0)
通过与历史不同模型比对,可以发现ARLSTM效果最佳。
前一段时间股市有一些大的波动,其实很早就有人说过,股市有风险,投资需谨慎。不过如果能有一个比较适合的模型进行预测就好了。今天我介绍一下,时间序列预测分析。
本人也是深度循环网络的小白,所以也算是与大家共勉了哈。有问题还希望大家多多指正。闲话少说,上代码
首先先读入numpy中的数据准备作为data
test_input_array.py
# coding: utf-8
from __future_...
Multivariate workload prediction using Vector Autoregressive and Stacked LSTM models
1 摘要:
向量自回归+堆叠LSTM
VAR用于过滤多元时间序列之间的线性相互依赖
堆叠LSTM捕获非线性趋势(从VAR模型计算得到的残差)
对比模型:AR-MPL,RNN-GRU、ARIMA-LSTM
文章提出多变量负载预测模型,使用向量自回归模型分析多元时间序列并预测未来的值。
根据VAR模型计算残差并将其作...
时间序列是时间间隔不变的情况下收集的时间点集合。分析这些集合来确定长期趋势,为了预测未来或进行其他形式的分析。但是什么使Time Series不同于常规回归问题呢?有两个原因:
1. 时间序列是与时间有关的。因此线性模型的基础假设:观察值是独立的是不适应这个场景的。
2. 伴随着增加和减少的趋势,大多数时间序列会存在季节性趋势,比如,特定时间的特定变化。例如,如果你看到羊毛夹克随时间变化的销量,你一定会发现冬季的销量会很高。
时间序列是按时间顺序排列的、随时间变化且相互关联的数据序列。
CSDN-Ada助手:
时序数据深度学习笔记——DNN(二)
qq_42189678: