GRU时间序列未来预测的问题

GRU预测代码如下,想实现通过取前n_train天数据预测predict_len天数,比如我要用前8天的数据预测后面22天的数据,但是用前8天的数据,会报错输出数据与输入的维度不一致,应该怎么解决?


# 预测未来数据
net.eval()
state = None
with torch.no_grad():
    y_list, y_hat_list = [], []
    y_list.append(all_data * (max_data - min_data) + min_data)
    for i in range(1, n_train):  # 取n_train天数据
        inputs = test_x[i - 1, 0].unsqueeze(1).unsqueeze(1)
        pred = inputs.squeeze().cpu().numpy().flatten() * (max_data - min_data) + min_data
        y_hat_list.append(pred)

    for i in range(n_train, predict_len + n_train + 1):  # 预测predict_len天数据
        inputs = torch.tensor(y_hat_list[-i:]).unsqueeze(1).float().to(device)
        output, state = net(inputs, state)
        pred = output.squeeze().cpu().numpy().flatten() * (max_data - min_data) + min_data
        y_hat_list.append(pred)
        print(f"第{i}天预测值:{pred.round(2)}")
        y_hat_list.append(pd.Series([pred], index=range(len(pred))))  # 将预测值转换为 Pandas Series 对象并添加到 y_list 中

报错如下:

img

【以下回答由 GPT 生成】

根据您提供的代码和描述,问题似乎出现在最后一行的代码中。在该行代码中,您尝试将预测值转换为Pandas Series对象并将其添加到y_list列表中。但是,这里有两个问题: 1. pred是一个numpy数组,无需将其包装在一个列表中,直接将其添加到y_list中即可。 2. 您使用了append方法两次,将同一个预测值添加到了y_hat_list列表中。这可能会导致维度不匹配的错误。

以下是修复后的代码:

# 预测未来数据
net.eval()
state = None
with torch.no_grad():
    y_list, y_hat_list = [], []
    y_list.append(all_data * (max_data - min_data) + min_data)
    for i in range(1, n_train):  # 取n_train天数据
        inputs = test_x[i - 1, 0].unsqueeze(1).unsqueeze(1)
        pred = inputs.squeeze().cpu().numpy().flatten() * (max_data - min_data) + min_data
        y_hat_list.append(pred)

    for i in range(n_train, predict_len + n_train + 1):  # 预测predict_len天数据
        inputs = torch.tensor(y_hat_list[-n_train:]).unsqueeze(1).float().to(device)
        output, state = net(inputs, state)
        pred = output.squeeze().cpu().numpy().flatten() * (max_data - min_data) + min_data
        print(f"第{i}天的预测值:{pred.round(2)}")
        y_list.append(pred)

y_list = pd.Series(y_list, index=range(len(y_list)))  # 将y_list转换为 Pandas Series 对象

修改后的代码移除了多余的append操作。请注意,我删除了无关的y_hat_list添加操作,并将预测结果直接添加到y_list中。此外,我在循环之外将y_list转换为Pandas Series对象。

如果您在修改代码后仍然遇到维度不匹配的错误,请提供完整的报错信息以便我更好地帮助您解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^