> 文章列表 > lstm预测未来的多个值,多步预测

lstm预测未来的多个值,多步预测

lstm预测未来的多个值,多步预测

        一般来说单步预测的精度是最高的,但是这样会导致预测未来的时长太短,即为超短期预测,但是实际中,需要预测未来的很多的步长

        假设我们的模型的单步预测模型,如果需要预测未来很多步的话,就需要先预测未来的一个值,然后重新组合成滑动窗口序列再去预测,我写了一段代码实现了这个功能。

代码函数如下:

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=datatry: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]