赞
踩
一般来说单步预测的精度是最高的,但是这样会导致预测未来的时长太短,即为超短期预测,但是实际中,需要预测未来的很多的步长。
假设我们的模型的单步预测模型,如果需要预测未来很多步的话,就需要先预测未来的一个值,然后重新组合成滑动窗口序列再去预测,我写了一段代码实现了这个功能。
代码函数如下:
- 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)
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
使用方法如下:
- #循环预测
- 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]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。