多变量LSTM输入形状调整:样本数变化及特征丢失问题求解
样本量从1132变为1092的原因
你设置的时间步长timesteps=40,模型需要用连续40个历史时间步的数据来预测后续时间步的标签,因此前40条数据没有足够的历史序列作为输入,无法构成有效训练样本。
总样本量计算逻辑为:总数据长度 - 时间步长 = 1132 - 40 = 1092,和你得到的X_train第一维数值一致。
纳入全部特征的正确调整方法
你当前代码只提取了第0列特征,且最后手动reshape时强制把特征维度设为1,所以只保留了1个特征,修改逻辑如下:
第一步:修改序列提取逻辑,保留所有特征列
把循环里提取X_train的代码,从仅取第0列改为取全部特征列:
end_len = len(train_scaled) X_train = [] y_train = [] timesteps = 40 for i in range(timesteps, end_len): # 原代码:仅提取第0列特征 # X_train.append(train_scaled[i - timesteps:i, 0]) # 修改为:提取4个特征列(假设5列中第0列为标签,1-4列为你要用到的4个输入特征) X_train.append(train_scaled[i - timesteps:i, 1:]) # y_train提取逻辑保持不变,取对应时间步的标签列即可 y_train.append(train_scaled[i, 0]) X_train, y_train = np.array(X_train), np.array(y_train)
第二步:无需强制reshape,或按实际特征数设置维度
修改后转成numpy数组的X_train已经自动符合Keras要求的[样本数, 时间步, 特征数]格式,不需要额外reshape。如果你要保留reshape写法,把最后一维改为你的实际特征数即可:
# 4对应你的输入特征总数 X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 4))
调整后X_train的形状会变为(1092, 40, 4),就能正常输入多变量LSTM模型训练。
内容的提问来源于stack exchange,提问作者Maha Al
相关产品推荐
相关产品推荐

