现有的Python实现的是模型的训练。训练结束后,还要对未来的气候进行预测。根据实验室已有的经验,预测方法有一对多和一对一。这里我们首先学习一对一,也就是实现滚动预测。
对于n步预测模型,常见的模型通常采用滚动预测方法实现,即通过t时刻及之前的时刻数据预测得到t+1时刻的数据,然后将t+1时刻的数据作为已知量带入的模型中再次预测t+2时刻的数据,重复n步,得到n步预测结果。然而,模型的多次滚动会使预测误差产生累计效应,不利于高精度预测。因此,本章通过对每一步均建立一个独立模型,进而集成n个模型的预测结果,实现多步预测。
先不加气象因子实现径流滚动预测。
我直接改吧。边改边想思路。
for k in range(0,len(x_trains)):
print("########################第"+str(k)+"个分解模态############################")
if models[k] is None:
model = build_model(prediction_steps)
try:
根据师兄的论文,他的方法是每预测一次,都训练一遍模型。我只预测接下来3个月的,所以多构建几个模型应该还行。
按照国际惯例,先把epochs=100设置成3,减少迭代次数。
文件名字先设置成:lstm-runoff-forecasting-3
我感觉我感觉就都只是训练集,不设置测试集就行了。
# Split data into training and testing sets
train_set_ratio = 0.8
row = int(round(train_set_ratio * len(windowed_data)))
这个部分是用来划分训练集和测试集的。那么我觉得这里应该不能划分,直接给训练集。测试集是训练集预测的一个数据。
测试集是测试集的最后一个窗口数据再往后,把数据集的最后一个值给窗口,用训练好的模型来跑结果。
row = int(len(windowed_data)-1)
这个画图只需要画出训练集的对比
我现在有的python代码,一个是气象因子+lstm。一个是vmd+lstm。
我觉得加上气象因子的话,预报也就要预报气象因子。还是有点麻烦的。
如果不加气象因子,得到的结果没有办法和师兄的结果相对照。所以还是加一下气象因子。
最后一个数据是只有x-test,没有y-test
#用来预测的第一个数据
prediction_datas_one = []
prediction_datas_one = np.array(prediction_datas_one)
prediction_datas_one = np.append(prediction_datas_one, cf[len(runoff)-7: len(runoff)-3])
prediction_datas_one = np.append(prediction_datas_one,cf[len(runoff)-1: len(runoff)])
prediction_datas_one = np.append(prediction_datas_one, nino[len(runoff)-6: len(runoff)-4])
prediction_datas_one = np.append(prediction_datas_one, ido[len(runoff)-10: len(runoff)-8])
prediction_datas_one = np.hstack((prediction_datas_one, runoff[len(runoff)-36:len(runoff)-35], runoff[len(runoff)-24:len(runoff)-21], runoff[len(runoff)-12: len(runoff)]))
prediction_datas_one = np.array(prediction_datas_one)
手动设置预测的数据,那么下面就把所有数据都设置成训练集,我们这里不设置测试集???
不对,如果不设置测试集,你就不知道你的模型合不合适。这两个不能弄混,因为根据以前的结果,训练集的拟合程度优于测试集。
我现在想的是用来预测的第一个数据能不能变成一个函数。每次需要这个数据的数据的时候调用就行。因为我要预测未来一年的不能写十二个把,用来预测的第一个,用来预测的第二个。。。
np.reshape()方法,把下面一种数据格式变成另一种数据格式
prediction_datas_one = np.reshape(prediction_datas_one, (len(prediction_datas_one), 1))
又一个瓶颈来了!反复出现这个错误。
是这个问题吗?不是
师兄点醒我了,这个报错提示的是维度不正确,期望3个维度,输入的却是2个维度。(所以一定要认真的看报错啊喂!)
python数组增加维度_Numpy 改变数组维度的几种方法小结
解决的方法参照了以上的博客
哈哈,成功解决!
epochs = 3
batch_size=1
这两个参数一改,预测的值都会变 所以到了观众们喜闻乐见的该参数环节··· 然而这个预测了以后怎么办呢?难道气象因子也都要预测,然后再重新预测嘛?
好了,对未来预测是项目需要的东西,就到这吧。下面想一想论文思路。