You need to enable JavaScript to run this app. 多变量LSTM输入形状调整:样本数变化及特征丢失问题求解
优惠活动
大模型
产品
解决方案
定价
更多

多变量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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 10:57:00