如何将时间序列DataFrame转为单变量LSTM分类器的合法输入?
报错原因
你搭建的LSTM模型要求输入为3维张量,维度规则为(样本数量, 时间步长, 特征数量),对应你代码里定义的input_shape=(n_timesteps,n_features)参数。
你当前转换后得到的输入是形状为(370*27, 25)的二维数组,缺少了最后一维的特征数量维度,因此触发维度不匹配的报错。
正确转换方法
根据你设定的时间步长25、单特征的参数,转换逻辑需要补充最后一维的特征维度,分两种场景处理:
- 场景1:你需要将每条长度为675的原始时间序列,拆分为27条长度为25的子序列作为独立样本
可以直接一步完成reshape操作:
注意:这种情况下你的标签X = df.values.reshape((370 * 27, 25, 1))y也需要同步调整,总数量要和输入样本数370*27=9990对应,否则训练时还会出现标签和样本不匹配的错误。 - 场景2:你不需要拆分原始序列,希望每条长度为675的原始样本对应一个分类结果
首先需要将LSTM层的输入时间步长修改为675,再做维度转换:# 修改模型输入定义 n_timesteps = 675 model = Sequential() model.add(LSTM(100,input_shape=(n_timesteps,n_features))) # 后续层代码保持不变 # 数据转换 X = df.values.reshape((370, 675, 1))
从你最初的参数设置来看,场景1更符合你的预期需求。
内容的提问来源于stack exchange,提问作者Cranjis
相关产品推荐
相关产品推荐

