使用LSTM网络做预报(Forecast)

在一次小小的比赛中需要做趋势预测,当时找了很多种方法,最后也对LSTM的使用做出一定的研究,现在大多数能找到的都是Predict,对于Forecast的做法虽然找到了原理,但由于各种原因自己未能很好写出。最后是完成了,这里也做一个小小的记录。

LSTM

完全不想解释,因为只是调包侠,原理还不懂,调参都是手动调的,很离谱。

代码

导入基础模块,preprocessing用作数据归一化预处理




基于gwo的lstm回归预测 lstm做回归预测_建立一个lstm


下面对疫情数据进行读取,疫情数据分为三列,分别为Date、Confirmed、New,因为只做一维数据,所以先drop掉Date和New,并且将剩下的Confirmed列用values的方式读取出来。


基于gwo的lstm回归预测 lstm做回归预测_数据_02


为了做归一化,将int转化为float,随后进行归一化处理


基于gwo的lstm回归预测 lstm做回归预测_数据_03


分割


基于gwo的lstm回归预测 lstm做回归预测_数据_04


下面就是Forecast的核心。因为LSTM适用于给出下一刻数据,那么我们就采取时间滑窗的方式,将预测出的下一刻数据加入到数据集中,在进行下一刻预测。其中,create_dataset是LSTM建立数据集的核心,而create_predict是建立滑窗。

look_back也是timesteps,它代表着LSTM的映射关系,例如1就代表着1个X预测1个Y,3就代表3个X预测1个Y,在数据量小时,可以适当调整


基于gwo的lstm回归预测 lstm做回归预测_数据_05


对训练集与测试集进行转换,因为keras需要。


基于gwo的lstm回归预测 lstm做回归预测_数据_06


初始化LSTM模型,注意input_shape,它决定了投进模型的数据维度,所以设置为look_back与前面设置的映射关系相符合。


基于gwo的lstm回归预测 lstm做回归预测_建立一个lstm_07


Predict


基于gwo的lstm回归预测 lstm做回归预测_数据_08


Forecast的又一个核心,运用了栈的原理,将Predict的值压入dataset中。

此处尤其注意,这几个操作所需的数据格式不一样,也是我试过很多次试出来的。append无法对array变量作用(或者是ndarray,我也忘了),所以要先将其变成List,同时,predict出的值自带中括号(我也不知道是什么数据类型),所以需要将其扁平化(一顿瞎编,我也不懂)(这一部分尤其重要,很多时候就停滞在此了)


基于gwo的lstm回归预测 lstm做回归预测_数据集_09


此部分为画图做准备,重新读取数据,并且设定出forecast的范围,因为往后预测了30步,所以此处设置为+1~+31


基于gwo的lstm回归预测 lstm做回归预测_数据_10


Finished!

此文章自己观看,单纯当胡编就行了。

————————————————