单变量LSTM预测模型(3)
LSTM 建模
LSTM基础
Keras 中 LSTM 的层维护一个 batch 的状态
一个 batch = 来自训练数据的确定个数的 rows , 他确定了在更新整个网络权重前需要处理的 pattern 的个数
默认的,batchs 间的状态会清空,通过调用 reset_states() 可以控制什么时候清除 LSTM 层状态
LSTM 层输入格式:
为矩阵,矩阵内容 [ samples, time steps, features ]
samples:来自 domain 的独立观测值,通常是 data 的行数据--就是行数
time steps:对于给定的观测值,给定变量有单独的时间步--就是时间窗口
features:在得到观测值的时刻,观测到的单独的 measures--就是列数(属性个数)
建模步骤
1、数据reshape为LSTM输入格式
X, y = train[:, 0:-1], train[:, -1]
X = X.reshape(X.shape[0], 1, X.shape[1])
2、LSTM层定义
layer = LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True)
batch_input_shape=表示每个batch需要读取的数据格式(batch_size=每batch读的数据行数,步长,属性数)
neurons=神经元个数,即记忆单元个数,1~5 就很高效了
batch通常和epoch一起
epochs:确定网络学习数据快慢,即权重的更新频率
3、输出定义
输出层是单一的神经元,用的线性激活函数来预测下一时间步的数据
4、度量与优化定义
损失函数=用MSE
优化算法=用ADAM
5、编译
model = Sequential()
model.add(LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
由于LSTM是有状态的,需要在每个epoch里面控制状态更新
默认的
(1)在每个epoch里的sample会被打乱,可以设置shuffle=False解决
(2)网络会输出debug信息,可以设置verbose=0解决
LSTM预测
两种训练/预测方式
(1)固定方式:将所有训练数据fit到模型,然后从测试数据,每次预测一个
(2)动态方式:在测试数据阶段,每次都会re-fit模型或更新模型