笔者原创:全网最全CNN-LSTM-Attention的多输入多输出多步长预测python代码,值得注意的是,该代码质量优异,分多个步长进行预测,可以应用同于多输入多输出,是多输入单输出、一步两步三步预测中,您需要的环境也给了配置,代码注释一目了然,值得学习使用!!!!

一、背景

    在现代数据分析与预测领域,时间序列预测占据着重要地位。时间序列数据广泛存在于金融、气象、医疗、交通等多个行业,对其进行准确预测有助于制定有效的决策和规划。然而,时间序列数据往往具有非线性、非平稳性和长期依赖性等特点,传统的统计方法难以准确捕捉其复杂特性。随着深度学习技术的快速发展,基于神经网络的预测模型逐渐成为时间序列预测领域的研究热点。其中,CNN-LSTM-Attention预测模型因其结合了卷积神经网络(CNN)、长短期记忆网络(LSTM)和注意力机制(Attention)的优势,在时间序列预测中展现出强大的潜力和优势。

    CNN以其强大的特征提取能力在图像处理领域取得了显著成效,并逐渐被引入到时间序列分析中。LSTM作为RNN的一种变体,特别适用于处理序列数据中的长期依赖问题。而注意力机制则能够自动关注输入数据中最重要的部分,提高模型对关键信息的捕捉能力。因此,将CNN、LSTM和注意力机制相结合,构建CNN-LSTM-Attention预测模型,成为解决时间序列预测问题的一种有效方法。

二、原理

CNN-LSTM-Attention预测模型的原理主要基于以下三个方面:

1、特征提取(CNN部分):

CNN通过卷积层对输入的时间序列数据进行特征提取。卷积层中的卷积核在输入数据上滑动,通过加权求和和激活函数的作用,提取出数据的局部特征。这些特征代表了时间序列在不同时间段内的变化规律。

池化层则用于降低数据的维度,减少计算量,并增强模型的鲁棒性。通过池化操作,模型能够忽略一些不重要的细节信息,专注于更重要的特征。

2、序列建模(LSTM部分):

LSTM作为循环神经网络的一种变体,特别适用于处理具有长期依赖性的时间序列数据。LSTM通过引入遗忘门、输入门和输出门三个门控机制,控制信息的流动,从而有效避免了传统RNN中的梯度消失或梯度爆炸问题。

LSTM层接收CNN层提取的特征作为输入,并通过其内部状态进行序列建模。在每个时间步上,LSTM单元都会根据当前输入和上一时间步的隐藏状态更新其内部状态,并输出当前时间步的预测值。

3、注意力加权(Attention部分):

注意力机制是一种让模型能够自动关注输入数据中重要部分的技术。在时间序列预测中,注意力机制可以帮助模型更加关注与当前预测最相关的历史信息。

在CNN-LSTM-Attention模型中,注意力层接收LSTM层的输出作为输入,并计算每个时间步的注意力权重。这些权重代表了不同时间步对预测结果的贡献程度。然后,模型使用这些权重对LSTM层的输出进行加权求和,得到最终的预测结果。

三、实现过程

CNN-LSTM-Attention预测模型的实现过程通常包括以下几个步骤:

1、数据预处理:

对原始时间序列数据进行清洗、归一化等预处理操作。清洗过程包括去除异常值、缺失值填充等;归一化则是将数据缩放到同一尺度上,以消除量纲差异对模型训练的影响。

将处理后的数据划分为训练集、验证集和测试集。训练集用于模型的训练过程;验证集用于在训练过程中调整模型参数和防止过拟合;测试集则用于评估模型的最终性能。

2、模型构建:

使用深度学习框架(如TensorFlow、PyTorch等)构建CNN-LSTM-Attention模型。根据具体任务和数据特点选择合适的网络结构和参数设置。

构建CNN层以提取时间序列数据的局部特征;构建LSTM层以进行序列建模并捕捉长期依赖性;构建注意力层以自动关注重要历史信息并进行加权求和。

设定损失函数(如均方误差MSE)和优化器(如Adam)等训练参数。损失函数用于评估模型预测值与真实值之间的差异;优化器则用于根据损失函数的梯度更新模型参数。

3、模型训练:

使用训练集数据对模型进行训练。在训练过程中,模型会不断迭代更新其参数以最小化损失函数。同时,可以使用验证集数据进行模型验证和参数调整以防止过拟合。

训练过程中可以观察损失函数的变化情况以及验证集上的性能指标来评估模型的训练效果。如果验证集上的性能指标开始下降则说明可能出现了过拟合现象,此时可以通过调整模型结构、增加正则化项或减小学习率等方法来缓解过拟合问题。

4、模型评估:

使用测试集数据对训练好的模型进行评估。评估指标通常包括预测准确率、召回率、F1分数以及均方根误差(RMSE)等。这些指标能够全面反映模型在测试集上的性能表现。

根据评估结果对模型进行进一步优化和改进。例如可以调整模型结构、更换优化器或调整超参数等方法来提高模型的预测性能。

5、模型应用:

  将训练好的CNN-LSTM-Attention模型应用于实际的时间序列预测任务中。根据具体任务需求对模型进行微调以适应不同的应用场景和数据特点。

  利用模型的预测结果进行相关决策和规划工作。例如可以根据金融市场预测结果制定投资策略;根据气象预测结果制定防灾减灾措施等。

   综上所述,CNN-LSTM-Attention预测模型通过结合CNN、LSTM和注意力机制的优势,在时间序列预测中展现出强大的潜力和优势。其实现过程包括数据预处理、模型构建、模型训练、模型评估和模型应用等步骤。在实际应用中,该模型具有广泛的应用前景和重要的研究价值。

数据来源为杭州2021、2022、2023年连续三年的天气数据。

对应环境:

多输入单输出预测:

多输入多输出:

部分核心代码:

# 对网络进行编译,选择计算误差的函数,优化器。
# model.compile(loss='mse', optimizer='adam', metrics=['mse'])
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])


# 拟合网络,对模型进行50轮的训练,每个批次512个数据,将验证数据集输入网络进行验证。
history = model.fit(train_X, train_y, epochs=50, batch_size=64, verbose=1, validation_data=(val_X, val_y))
# model.save('CNN-LSTM-Attention.h5')

# 训练完了以后利用训练好的模型作出预测
yhat = model.predict(test_X)


# 将测试集由三维转化为2维,其中长为该数据集的长度,宽是数据集的特征数量
test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))
# print("test_X",test_X.shape,len(test_X), len(test_X[0]),test_X[0],test_X)

# 反向缩放预测值,将预测值由归一化的数据转化为归一化之后的数据
inv_yhat = concatenate((test_X[:, :3], yhat), axis=1)
# print(inv_yhat.shape)
# print("inv_yhat",len(inv_yhat), len(inv_yhat[0]),inv_yhat[0],inv_yhat)
inv_yhat = scaler.inverse_transform(inv_yhat)


# 取出反归一化后的数据,这个值就是我们的预测值
# 多输入多输出
prediction = inv_yhat[:, 3:]
print("prediction",prediction)

# 反向缩放实际值
test_y = test_y.reshape((len(test_y), 13))
inv_y = concatenate((test_X[:, :3], test_y), axis=1)
inv_y = scaler.inverse_transform(inv_y)
# 多输入多输出
real = inv_y[:, 3:]
print("real",real)

# 计算RMSE和MAPE,并且将真实值和预测值打印出来。
rmse = sqrt(mean_squared_error(real, prediction))
mape = np.mean(np.abs((real - prediction) / prediction)) * 100
r2 = r2_score(real, prediction)
mae = mae_value(real, prediction)
MAE = 0
for i in range(len(mae)):
    MAE = MAE + mae[i]
print('Test RMSE: %.3f' % rmse)
print('Test MAPE: %.3f' % mape)
print('Test R2: %.3f' % r2)
print('Test MAE: %.3f' % MAE)


wucha_1 = (real - prediction)/real
wucha_2 = np.abs(real - prediction)

###欢迎关注:年轻的战场ssd 获取资料,也欢迎与笔者1对1交流

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐