一般来说单步预测的精度是最高的,但是这样会导致预测未来的时长太短,即为超短期预测,但是实际中,需要预测未来的很多的步长。
假设我们的模型的单步预测模型,如果需要预测未来很多步的话,就需要先预测未来的一个值,然后重新组合成滑动窗口序列再去预测,我写了一段代码实现了这个功能。
代码函数如下:
def for_predict(data,model,pre_lengths,dim):
"""
data:第一个给定的数据
model:单步预测回归模型LSTM等
pre_lengths:预测未来的步数
dim:none,timesteps,dim中的dim维
return: a ndarray that has pre_lengths elements
"""
result=[]
init_sequence=data
try:
if data.shape == None or len(init_sequence.shape) !=3:
raise TypeError('数据类型错误,必须为(none,timesteps,dim)')
except TypeError as e:
print('数据类型错误,必须为(none,timesteps,dim)')
if dim == 1:
for i in range(pre_lengths):
pred=model(init_sequence).numpy()[0][0]
init_sequence=init_sequence[0][1:]
init_sequence=np.append(init_sequence,pred)
init_sequence=init_sequence.reshape(1,look_back,dim)
result.append(pred)
return np.array(result).reshape(-1,1)
if dim !=1:
for i in range(pre_lengths):
pred=model(init_sequence).numpy()[0][:]
init_sequence=init_sequence[0][1:]
init_sequence=np.append(init_sequence,pred)
init_sequence=init_sequence.reshape(1,look_back,dim)
result.append(pred)
return np.array(result)
使用方法如下:
#循环预测
dim=1
pre_lengths=30
init_sequence=m_trx[600].reshape(1,look_back,dim)
result=for_predict(init_sequence,model,pre_lengths,dim)
results=sc.inverse_transform(result)[:,0]