结果可视化
plt.figure(figsize=(12, 12)) plt.plot(pivoted.index, pivoted.temp_absolute_original, color=’blue’, label=’original’) plt.plot(pivoted.index, pivoted.temp_absolute_forecast, color=’red’, label=’forecast’, alpha=0.6) plt.title(‘Temperatureforecasts—absolutedata’) plt.legend() plt.show()
使用训练好的模型,我们可以预测值并将其与原始值进行比较。
中位数绝对误差为0.34摄氏度,平均值为0.48摄氏度。
要预测提前24小时,唯一需要做的就是更改超参数。具体来说,是n_ahead变量。该模型将尝试使用之前(一周)的168小时来预测接下来的24小时值。
#Numberoflags (hoursback) touseformodelslag=168#Stepsaheadtoforecastn_ahead=24#Shareofobsintestingtest_share=0.1#Epochsfortrainingepochs=20#Batchsizebatch_size=512#Learningratelr=0.001#NumberofneuronsinLSTMlayern_layer=10#CreatingtheXandYfortrainingX, Y=create_X_Y(ts_s.values, lag=lag, n_ahead=n_ahead)n_ft=X.shape[2]Xtrain, Ytrain=X[0:int(X.shape[0] * (1-test_share))], Y[0:int(X.shape[0] * (1-test_share))]Xval, Yval=X[int(X.shape[0] * (1-test_share)):], Y[int(X.shape[0] * (1-test_share)):] #Creatingthemodelobjectmodel=NNMultistepModel( X=Xtrain, Y=Ytrain, n_outputs=n_ahead, n_lag=lag, n_ft=n_ft, n_layer=n_layer, batch=batch_size, epochs=epochs, lr=lr, Xval=Xval, Yval=Yval, )#Trainingthemodelhistory=model.train()
检查一些随机的24小时区间:
有些24小时序列似乎彼此接近,而其他序列则不然。
平均绝对误差为1.69 C,中位数为1.27C。
总结,本文介绍了在对时间序列数据进行建模和预测时使用的简单管道示例:
读取,清理和扩充输入数据
为滞后和n步选择超参数
为深度学习模型选择超参数
初始化NNMultistepModel()类
拟合模型
预测未来n_steps
最后本文的完整代码:https://github.com/Eligijus112/Vilnius-weather-LSTM