lstm은 미래의 여러 값을 예측, 다단계 예측

        일반적으로 1단계 예측의 정확도가 가장 높지만 이는 미래에 대한 예측 기간, 즉 초단기 예측이 너무 짧아지게 되지만 실제로는 미래에 많은 단계를 거쳐야 합니다. 예측했다.

        우리 모델의 단일 단계 예측 모델을 가정하고 미래에 많은 단계를 예측해야 하는 경우 미래의 값을 예측한 다음 이를 슬라이딩 윈도우 시퀀스로 재결합하여 예측해야 합니다. 이 기능을 구현합니다.

코드 기능은 다음과 같습니다.

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]

Supongo que te gusta

Origin blog.csdn.net/weixin_44992737/article/details/130170545
Recomendado
Clasificación