You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keras中实现含额外特征拼接的LSTM多变量时序预测模型

在Keras中实现带额外特征拼接的LSTM时间序列预测模型

Sequential模型仅支持单输入单输出的线性结构,你的需求需要多分支输入(时序特征分支+额外特征分支),因此必须使用Keras函数式API来构建自定义模型,以下是具体实现方案:

核心思路

  1. 拆分输入:将数据集分为两部分
    • 时序特征输入:包含X1-X5和y的6个序列特征,形状为(样本数, 时间步长n_input, 6)
    • 额外特征输入:包含mean、std、var、median、volume的静态特征,形状为(样本数, 5)(无时间维度)
  2. 构建LSTM分支:处理时序输入提取时序特征
  3. 特征拼接:根据需求在全连接层前后拼接LSTM输出与额外特征
  4. 组合模型:定义多输入与最终输出,完成模型构建

完整代码实现(全连接层前拼接)

from keras.models import Model
from keras.layers import Input, LSTM, Dense, Concatenate

# 定义参数:n_input为时间步长,n_seq_features为时序特征数,n_extra_features为额外特征数
n_input = 30
n_seq_features = 6
n_extra_features = 5

# 定义两个输入分支
seq_input = Input(shape=(n_input, n_seq_features), name='sequence_input')
extra_input = Input(shape=(n_extra_features,), name='extra_features_input')

# LSTM分支处理时序数据
lstm_out = LSTM(100, activation='relu')(seq_input)

# 拼接LSTM输出与额外特征(此处为全连接层前拼接)
concat_out = Concatenate()([lstm_out, extra_input])

# 全连接层与输出层
dense_out = Dense(64, activation='relu')(concat_out)
final_out = Dense(1)(dense_out)

# 定义并编译模型
model = Model(inputs=[seq_input, extra_input], outputs=final_out)
model.compile(optimizer='adam', loss='mse')

# 查看模型结构
model.summary()

训练时的数据输入方式

训练时需同时传入两个输入数据集:

# X_seq为时序特征数据,X_extra为额外特征数据,y为预测标签
model.fit([X_seq, X_extra], y, epochs=50, batch_size=32)

调整为全连接层后拼接

若需要在全连接层之后拼接额外特征,只需调整拼接顺序:

# LSTM分支
lstm_out = LSTM(100, activation='relu')(seq_input)
# 先经过全连接层
dense1_out = Dense(64, activation='relu')(lstm_out)
# 再拼接额外特征
concat_out = Concatenate()([dense1_out, extra_input])
# 最终输出层
final_out = Dense(1)(concat_out)

model = Model(inputs=[seq_input, extra_input], outputs=final_out)

内容的提问来源于stack exchange,提问作者Ismaele Le Voci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:42:10