Python时间序列LSTM预测系列教程(3)-单变量

来源:互联网 发布:红蜘蛛软件年费 编辑:程序博客网 时间:2024/06/07 01:08

单变量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模型或更新模型








阅读全文
0 0