0. LSTM用于时间序列预测
LSTM因其具有记忆的功能,可以利用很长的序列信息来建立学习模型,所以用它来进行时间序列的预测会很有优势。
在实际工程中用LSTM进行时间序列的预测主要有两个难点:一是前期对数据的处理,二是初始模型的搭建。对数据的处理无论是单步、多步、单变量还是多变量都会用到滑动窗口来处理数据,具体处理的方法后面会进行阐述;而对模型的搭建则要根据要解决的问题,原始数据的情况等,对模型的参数做相应的设定,如果单纯的LSTM无法满足要求,一般会加入全连接层来解决。
1. 单变量单步
单变量单步的预测是最简单的,比如说有一组数据为:
[1,2,3,4,5,6,7,8,9,10],然后要求利用这组数据训练一个模型,使其能对后面提供的数据做一个单步的预测。
我们先来对数据进行处理,处理的时候要根据不同框架所要求的LSTM的输入形式来处理,比如我们用Pytorch框架的时候输入要求是(seq_len, batch, input_size)。
因为是单变量的数据,我们令input_size=3,然后设seq_len=7,然后batch为1,
处理后的数据变为:
[[1,2,3], =====> [4]
[2,3,4], =====> [5]
[3,4,5], =====> [6]
[4,5,6], =====> [7]
[5,6,7], =====> [8]
[6,7,8], =====> [9]
[7,8,9]] =====> [10]
前半部分是输入,箭头指向输出。也就是说将数据分批输入LSTM,没三个数据对应一个单步的预测目标。
数据处理好之后就是模型的搭建了,我们根据输入输出的形式来反推模型的结构。我们知道LSTM的结构是lstm = nn.LSTM(input_size, hidden_size, num_layers),由上面给出的输入的形式可以确定input_size=3, hidden_size, num_layers这两个参数要自己设置,也就是隐藏层的大小和层数。我们的预计输出的形式为(7,1),但是LSTM的标准输出形式为:
output=(seq_len,batch,num_directionshidden_size)=(7,1,num_directionshidden_size),
当num_directionshidden_size不为1时我们需要在LSTM的后面加一个全连接层,并令全连接层的输入形式为num_directionshidden_size,输出为1 。这样我们的输出就变为了out