声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
效果展示
数据介绍
创新点
模型流程
部分代码
完整代码获取
今天为大家带来一期PSA-CNN-LSTM-Attention回归预测代码,知网和WOS都是搜不到的!完全是作者独家创立的!可以说是尚未发表的创新点!直接替换Excel数据即可用!
特别需要指出的是,我们在各个学术平台上搜索PSA-CNN-LSTM-Attention,都是完全搜索不到这个模型的!!!不信的可以看下面截图!
知网平台:
WOS平台:
废话不多说,直接看效果图!
效果展示
训练集预测效果图:
测试集预测效果图:
四张曲线拟合图!:
适应度变化曲线图:
误差直方图:
网络结构图:
迭代曲线图:
以上所有图片(9张!),作者都已精心整理过代码,都可以一键运行main直接出图!非常方便!!
适用平台:Matlab2020B及以上,没有的文件夹里已经免费提供安装包,直接下载即可!
数据介绍
本期采用的数据是经典的多变量时间序列预测数据集,是为了方便大家替换自己的数据集,各个变量采用特征1、特征2…表示,无实际含义,最后一列即为输出。
更换自己的数据时,只需最后一列放想要预测的列,其余列放特征即可,无需更改代码,非常方便!
创新点
以下这些文字,如果大家需要用这个程序写论文,都是可以直接搬运的!
1.结合CNN和LSTM的优势:
CNN通过卷积层处理输入数据,提取局部特征;LSTM则处理序列化的特征,捕捉长期依赖关系。这种结合方式使得模型既能理解局部的输入特征,也能理解这些特征随时间的变化关系,增强了模型对于复杂序列数据的理解能力。
2.引入注意力机制:
在CNN之后引入全局平均池化层和SE通道注意力机制,通过学习各个通道的重要性来自适应地重新校准通道的特征响应,增强模型对重要特征的敏感度与关键特征的关注度,提高了模型的表示能力。这使得模型能够更加关注于对预测目标最重要的特征。这种机制进一步增强了模型捕捉关键信息的能力,同时保留了序列特征的丰富性。
3.利用24年最新的PSA优化算法实现超参数自动优化:
PID搜索优化算法(PID-based search algorithm, PSA)于2023年12月发表在中科院1区Top SCI期刊《Expert Systems With Applications》上,该算法刚刚提出,提出时间极短,目前还没有使用该算法的文献,你先用,你就是创新!
PSA灵感来源于增量PID算法,通过连续调整系统偏差将整个种群收敛到最优状态。原文作者以CEC2017的基准测试函数和六个约束问题。通过与近年来提出的七种元启发式算法的比较,验证了PSA的优化性能。实验结果表明,PSA算法在大部分函数上均取得了最优结果!
具体原理和测试效果请看这篇推文:
SCI一区新算法-PID搜索优化算法(PSA)-公式原理详解与性能测评 Matlab代码免费获取
模型流程
最后再介绍一下我们的这个模型是怎么实现的以及它的流程:
1.数据导入:从Excel文件中读取数据,设定最后一列为输出变量,其余列作为特征变量。
2.训练集与测试集划分:按比例划分训练集和测试集,采用时间序列的重构方法准备数据。
3.数据归一化:对训练集和测试集的特征和标签进行归一化处理,以提高模型训练效率。
4.优化算法确定超参数:使用PID优化算法(PSA)确定CNN-LSTM-Attention模型的最优参数,包括学习率、隐藏层节点数和正则化系数。
5.构建模型:设计CNN-LSTM-Attention网络,其中CNN用于特征提取,LSTM处理序列依赖,注意力机制强化关键信息。
6.模型训练:将PSA算法确定的最优参数代入该模型,使用训练集对CNN-LSTM-Attention模型进行训练。
7.模型预测:利用训练好的模型对训练集和测试集进行预测,然后对预测结果进行反归一化。
8.性能评估:通过绘制真实值与预测值的对比图,并计算R^2、MAE、RMSE和MAPE等指标,评估模型性能。
部分代码
%% 导入数据
result = xlsread('数据集.xlsx');
%% 数据分析
num_samples = length(result); % 样本个数
kim = 6; % 延时步长(前面多行历史数据作为自变量)
zim = 1; % 跨zim个时间点进行预测
nim = size(result, 2) - 1; % 原始数据的特征是数目
%% 划分数据集
for i = 1: num_samples - kim - zim + 1
res(i, :) = [reshape(result(i: i + kim - 1 + zim, 1: end - 1)', 1, ...
(kim + zim) * nim), result(i + kim + zim - 1, end)];
end
%% 数据集分析
outdim = 1; % 最后一列为输出
num_size = 0.8; % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征长度
%% 划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);
P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
完整代码获取
点击下方小卡片,后台回复关键字,不区分大小写:
CXYHE
其他更多需求或想要的代码均可点击下方小卡片后后台私信,看到后会秒回~