LSTM时间序列预测不使用因变量作为输入特征的代码调整方法
调整多变量LSTM代码实现不纳入待预测变量的方法
你遇到的问题核心是原教程的监督数据集生成逻辑默认把所有历史特征(包括待预测目标的滞后值)都放进了输入,只需要调整数据集筛选逻辑和输入维度参数即可,具体步骤如下:
1. 调整监督数据集筛选规则
原教程的数据集默认列顺序为[pollution, dew, temp, press, wnd_dir, wnd_spd, snow, rain],对应series_to_supervised函数生成的列名格式为var1(t-1), var2(t-1)...var8(t-1), var1(t), var2(t)...,其中var1就是待预测的pollution变量。
你只需要筛选掉所有对应pollution的历史滞后列即可:
# 筛选输入列:排除所有pollution对应的历史滞后列,保留其他7个特征的历史列 input_cols = [col for col in reframed.columns if 'var1' not in col and '(t-' in col] # 输出列保留未来时刻的pollution值 output_col = ['var1(t)'] # 生成新的监督数据集 reframed_filtered = reframed[input_cols + output_col]
上述规则对任意滞后步长n_in都生效,不需要手动调整列索引。
2. 调整输入数据的维度参数
原教程每个时间步的输入特征是8个(含pollution),剔除后每个时间步输入特征为7个,reshape的时候把最后一个维度从8改成7即可:
values = reframed_filtered.values n_train_hours = 365 * 24 train = values[:n_train_hours, :] test = values[n_train_hours:, :] # 拆分输入输出 train_X, train_y = train[:, :-1], train[:, -1] test_X, test_y = test[:, :-1], test[:, -1] # 第三个参数从原代码的8改为7,对应剩余的7个输入特征 train_X = train_X.reshape((train_X.shape[0], n_in, 7)) test_X = test_X.reshape((test_X.shape[0], n_in, 7))
注意事项
这种方案属于无历史目标值的多变量预测,拟合难度会比加入滞后pollution的方案高,如果你有可用的历史pollution观测值,建议优先保留,预测精度会有明显提升。
内容的提问来源于stack exchange,提问作者Mz Irn
相关产品推荐
相关产品推荐

