如何让训练有素的 LSTM 预测了解即将发生的已知特殊事件?

问题描述 投票:0回答:1

我根据每日销售数据训练了 LSTM 模型,其中包括对销售影响很大的节假日和特殊活动(作为二进制指标)。但是,虽然在测试集之外进行预测,但该模型并未考虑有影响力的已知未来假期。我怎样才能让我的模型意识到这一点?

我使用包含销售和假期的数据集作为二进制指标,直到记录销售的最后一天。我有未来假期二进制指标数据集,但它不包含在此处。问题是如何使用它进行预测。这是我的初始代码,它在测试集上给出了良好的结果: ”

data = df_resampled[['Sales', 'Hol1', 'Hol2', 'Hol3', 'Hol4', 'Hol5','Weekend','Summer']].values

# Normalize data

scaler = MinMaxScaler(feature_range=(0, 1))
data_scaled = scaler.fit_transform(data)

# Split data

train_size = int(len(data_scaled) * 0.8)
train, test = data_scaled[:train_size], data_scaled[train_size:]

# LSTM training sequences

def create_sequences(data, seq_length):
sequences, targets = [], []
for i in range(len(data) - seq_length):
seq = data[i:i + seq_length]
target = data[i + seq_length]
sequences.append(seq)
targets.append(target)
return np.array(sequences), np.array(targets)

seq_length = 10
train_sequences, train_targets = create_sequences(train, seq_length)
test_sequences, test_targets = create_sequences(test, seq_length)

# Reshape input (samples, time steps, features)

train_sequences = np.reshape(train_sequences, (train_sequences.shape[0], train_sequences.shape[1], train_sequences.shape[2]))
test_sequences = np.reshape(test_sequences, (test_sequences.shape[0], test_sequences.shape[1], test_sequences.shape[2]))

# LSTM model with additional features

model = Sequential()
model.add(LSTM(units=50, input_shape=(train_sequences.shape[1], train_sequences.shape[2])))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')

# Train the model

model.fit(train_sequences, train_targets[:, 0], epochs=50, batch_size=32)

# Make predictions on test data

test_predictions = model.predict(test_sequences)

# Invert to original scale

test_predictions_inv = scaler.inverse_transform(np.concatenate((test_predictions, test_targets[:, 1:]), axis=1))[:, 0]
test_targets_inv = scaler.inverse_transform(test_targets)[:, 0]

python machine-learning lstm recurrent-neural-network forecasting
1个回答
0
投票

要对即将发生的已知特殊事件进行训练有素的 LSTM(长短期记忆)预测,您可以按照以下步骤操作:

特征工程:

将事件信息作为附加功能集成到数据集中。创建二进制变量,指示每个时间步是否存在特殊事件。 您还可以考虑创建与事件相关的其他特征,例如事件的接近度、持续时间或幅度。 数据预处理:

标准化您的数据,以确保所有特征都处于相似的规模。这有助于模型在训练期间更快地收敛。 调整输入顺序:

在为 LSTM 准备输入序列时,对其进行扩展以包含有关即将发生的事件的信息。例如,如果您的 LSTM 在长度为 N 的序列上进行训练,您可以扩展每个序列以包含有关接下来 K 个时间步中的事件的信息。 标签:

确保您的目标标签(您尝试预测的值)与扩展输入序列适当对齐。如果您要预测下一个时间步,请确保标签对应于紧随扩展输入序列之后的时间步。 模型架构:

修改 LSTM 架构以处理附加功能。您可以在每个时间步将与事件相关的特征与常规输入序列连接起来。 培训:

使用附加功能在扩展数据集上训练 LSTM。考虑使用验证集来监控模型的性能。 超参数调整:

根据您的具体问题和数据集,您可能需要调整超参数,例如学习率、批量大小和 LSTM 单元的数量。 评价:

在包含已知特殊事件的时期的测试集上评估模型的性能。请注意模型捕捉这些事件对预测的影响的程度。 微调:

如有必要,根据模型在测试集上的表现对模型进行微调。这可能涉及调整超参数或进一步修改架构。 监控和更新:

定期监控模型的性能并根据需要进行更新。如果您有有关即将发生的事件的新数据,请重新训练模型以合并此信息。 请记住,模型在合并特殊事件方面的有效性取决于您设计的功能的质量和相关性以及模型对这些功能的训练程度。此外,超参数和模型架构的选择对整体性能起着至关重要的作用。

© www.soinside.com 2019 - 2024. All rights reserved.