【MATLAB第36期】基于MATLAB的QOWOA-LSTM鲸鱼优化算法准反向策略的WOA优化LSTM时间序列预测模型 优势明显,注释详细,绘图丰富

简介: 【MATLAB第36期】基于MATLAB的QOWOA-LSTM鲸鱼优化算法准反向策略的WOA优化LSTM时间序列预测模型 优势明显,注释详细,绘图丰富

【MATLAB第36期】基于MATLAB的QOWOA-LSTM鲸鱼优化算法准反向策略的QOWOA优化LSTM时间序列预测模型,优势明显,注释详细,绘图丰富


一、代码优势


1.使用优化后的QOWOA算法优化LSTM超参数(学习率,隐藏层节点,正则化系数,训练次数)

2.目标函数考虑训练集和测试集,更加合理;运行结果稳定,可直接调用结果,且调用结果非常方便。

3.滑动窗口方法处理单列时间序列数据,考虑历史数据的影响。

4.代码一体化,一键运行;注释丰富,评价指标丰富,逻辑清晰,适合小白学习。

5.代码绘图丰富(除基础绘图以外,还包括训练LOSS图、超参数迭代图)、美观

6.命令行窗口可见运行过程的结果.

7.参数可在代码中设置,方便调试;优化超参数可以根据需求更改 。


二、后期研究计划


后续将在博文中更新更丰富、功能更完整的作品,敬请期待。

1.多层LSTM结构优化,含单向LSTM/GRU和双向Bilstm混合模型

2.更多超参数优化,含结构层数量、隐含层节点数、最小批处理数量、时间步数等

3.含预测未来功能

4.更多新的算法以及在基础上改进算法对比。

5.loss内置函数修改

6.多场景应用(分类、回归、多输入多输出等等)


三、代码展示

%%  1.清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行
%%  2.导入数据(时间序列的单列数据)
result = xlsread('数据集.xlsx');
%%  3.数据分析
num_samples = length(result);  % 样本个数 
kim = 15;                      % 延时步长(kim个历史数据作为自变量)
zim =  1;                      % 跨zim个时间点进行预测
%%  4.划分数据集
for i = 1: num_samples - kim - zim + 1
    res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(i + kim + zim - 1)];
end
%%  5.数据集分析
outdim = 1;                                  % 最后一列为输出
num_size = 0.7;                              % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim;                  % 输入特征维度
%%  6.划分训练集和测试集
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);
%%  7.数据归一化
[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);
%%  8.数据平铺
%   将数据平铺成1维数据只是一种处理方式
%   也可以平铺成2维数据,以及3维数据,需要修改对应模型结构
%   但是应该始终和输入层数据结构保持一致
P_train =  double(reshape(P_train, f_, 1, 1, M));
P_test  =  double(reshape(P_test , f_, 1, 1, N));
t_train = t_train';
t_test  = t_test' ;
%%  9.数据格式转换
for i = 1 : M
    p_train{i, 1} = P_train(:, :, 1, i);
end
for i = 1 : N
    p_test{i, 1}  = P_test( :, :, 1, i);
end
%%  10.优化算法参数设置
SearchAgents_no = 5;                   % 种群数量
Max_iteration = 5;                    % 最大迭代次数
dim = 4;                               % 优化参数个数
lb = [1e-3, 10, 1e-4,20];                 % 参数取值下界(学习率,隐藏层节点,正则化系数,训练次数)
ub = [1e-2, 80, 1e-3,100];                 % 参数取值上界(学习率,隐藏层节点,正则化系数,训练次数)
fobj=@(x)fun(x);  %适应度函数
%%  11.优化算法初始化
[Best_sol,Best_X,Convergence,BestNet,pos_curve]=QOWOA(SearchAgents_no,dim,Max_iteration,lb,ub,fobj)
%% 12.优化前LSTM运行结果
[fitness1,net1,res1,info1] =  fun([0.005,50,0.005,50]); % 基础参数取值(学习率,隐藏层节点,正则化系数,训练次数)
predict_value1=res1.predict_value1;
predict_value2=res1.predict_value2;
true_value1=res1.true_value1;
true_value2=res1.true_value2;
i=1;
disp('-------------------------------------------------------------')
disp('LSTM结果:')
rmse1=sqrt(mean((true_value1(i,:)-predict_value1(i,:)).^2));
disp(['LSTM训练集根均方差(RMSE):',num2str(rmse1)])
mae1=mean(abs(true_value1(i,:)-predict_value1(i,:)));
disp(['LSTM训练集平均绝对误差(MAE):',num2str(mae1)])
mape1=mean(abs((true_value1(i,:)-predict_value1(i,:))./true_value1(i,:)));
disp(['LSTM训练集平均相对百分误差(MAPE):',num2str(mape1*100),'%'])
r2_1=R2(true_value1(i,:),predict_value1(i,:));
disp(['LSTM训练集R-square决定系数(R2):',num2str(r2_1)])
rmse2=sqrt(mean((true_value2(i,:)-predict_value2(i,:)).^2));
disp(['LSTM测试集根均方差(RMSE):',num2str(rmse2)])
mae2=mean(abs(true_value2(i,:)-predict_value2(i,:)));
disp(['LSTM测试集平均绝对误差(MAE):',num2str(mae2)])
mape2=mean(abs((true_value2(i,:)-predict_value2(i,:))./true_value2(i,:)));
disp(['LSTM测试集平均相对百分误差(MAPE):',num2str(mape2*100),'%'])
r2_2=R2(true_value2(i,:),predict_value2(i,:));
disp(['LSTM测试集R-square决定系数(R2):',num2str(r2_2)])
%% 13. LSTM绘图
%% 14.优化后WOA-LSTM运行结果  
[fitness2,net2,res2,info2] =  fun(Best_X); % 基础参数取值(学习率,隐藏层节点,正则化系数,训练次数)
%% 15.WOA-LSTM绘图
%% 16.QOWOA-LSTM运行结果
%% 17.QOWOA-LSTM绘图


四、运行结果


LSTM结果:

LSTM训练集根均方差(RMSE):0.023407

LSTM训练集平均绝对误差(MAE):0.01781

LSTM训练集平均相对百分误差(MAPE):2.9834%

LSTM训练集R-square决定系数(R2):0.95768

LSTM测试集根均方差(RMSE):0.024046

LSTM测试集平均绝对误差(MAE):0.01902

LSTM测试集平均相对百分误差(MAPE):3.2605%

LSTM测试集R-square决定系数(R2):0.78619


QOWOA-LSTM结果:

QOWOA-LSTM优化得到的最优参数为:

QOWOA-LSTM优化得到的隐藏单元数目为:42

QOWOA-LSTM优化得到的最大训练周期为:88

QOWOA-LSTM优化得到的InitialLearnRate为:0.0050054

QOWOA-LSTM优化得到的L2Regularization为:0.00058159

QOWOA-LSTM训练集根均方差(RMSE):0.012849

QOWOA-LSTM训练集平均绝对误差(MAE):0.0095498

QOWOA-LSTM训练集平均相对百分误差(MAPE):1.5737%

QOWOA-LSTM训练集R-square决定系数(R2):0.9858

QOWOA-LSTM测试集根均方差(RMSE):0.014634

QOWOA-LSTM测试集平均绝对误差(MAE):0.011312

QOWOA-LSTM测试集平均相对百分误差(MAPE):1.9105%

QOWOA-LSTM测试集R-square决定系数(R2):0.91914


五、代码获取


后台私信回复“36期”即可获取下载链接。

文章知识点与官方知识档案匹配,可进一

相关文章
|
2月前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
207 80
|
1月前
|
运维 监控 算法
企业局域网监控软件中 Java 优先队列算法的核心优势
企业局域网监控软件是数字化时代企业网络安全与高效运营的基石,犹如一位洞察秋毫的卫士。通过Java实现的优先队列算法,它能依据事件优先级排序,确保关键网络事件如异常流量、数据泄露等被优先处理,保障系统稳定与安全。代码示例展示了如何定义网络事件类并使用PriorityQueue处理高优先级事件,尤其在面对疑似风险时迅速启动应急措施。这一核心技术助力企业在复杂网络环境中稳健前行,护航业务腾飞。
65 32
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
116 10
|
2月前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
3月前
|
存储 缓存 算法
C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力
本文探讨了C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力。文章还分析了数据结构的选择与优化、算法设计的优化策略、内存管理和代码优化技巧,并通过实际案例展示了C语言在排序和图遍历算法中的高效实现。
73 2
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
4月前
|
算法
动态规划算法学习四:最大上升子序列问题(LIS:Longest Increasing Subsequence)
这篇文章介绍了动态规划算法中解决最大上升子序列问题(LIS)的方法,包括问题的描述、动态规划的步骤、状态表示、递推方程、计算最优值以及优化方法,如非动态规划的二分法。
101 0
动态规划算法学习四:最大上升子序列问题(LIS:Longest Increasing Subsequence)
|
4月前
|
机器学习/深度学习 自然语言处理 PyTorch
【机器学习】探索LSTM:深度学习领域的强大时间序列处理能力
【机器学习】探索LSTM:深度学习领域的强大时间序列处理能力
|
5月前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的CNN-LSTM的时间序列回归预测matlab仿真
本项目展示了一种结合灰狼优化(GWO)与深度学习模型(CNN和LSTM)的时间序列预测方法。GWO算法高效优化模型超参数,提升预测精度。CNN提取局部特征,LSTM处理长序列依赖,共同实现准确的未来数值预测。项目包括MATLAB 2022a环境下运行的完整代码及视频教程,代码内含详细中文注释,便于理解和操作。
|
6月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
272 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码