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

猜你喜欢

转载自blog.csdn.net/weixin_44992737/article/details/130170545