分享

WOA-CNN-LSTM鲸鱼优化深度学习预测模型的超参数,Mtlab代码,包含特征可视化,数据由Excel导入,直接运行!

 cuvka4gsj5f538 2023-11-18 发布于湖北

WOA-CNN-LSTM基于鲸鱼优化算法(WOA)、卷积神经网络(CNN)和长短期记忆网络(LSTM)的超前24步多变量时间序列回归预测算法。适用平台:Matlab2020及以上

WOAWhale Optimization Algorithm)是一种启发式优化算法,用于寻找最优超参数组合,以改进深度学习模型的性能。对于CNN-LSTM回归预测模型,调整CNN卷积核大小、LSTM神经元个数和学习率等超参数可以对模型性能产生显著影响。

CNN卷积核大小:卷积核大小决定了CNN网络的感受野,即每个卷积层可以捕获的特征的空间范围。选择不同大小的卷积核可以影响模型的特征提取能力。较小的卷积核可以捕获更细粒度的特征,而较大的卷积核可以捕获更宏观的特征。

LSTM神经元个数:LSTM是一种适用于序列数据的循环神经网络,其神经元个数决定了模型的复杂性和记忆能力。较多的LSTM神经元可以提高模型的学习能力,但可能导致过拟合。

学习率:学习率是训练深度学习模型时的一个关键超参数,它控制每次参数更新的步长。学习率过大可能导致模型不稳定和发散,学习率过小可能导致训练过慢或陷入局部最小值。

WOA是一种全局性优化算法,可以帮助找到全局最优的超参数组合。它不依赖于梯度信息,因此适用于非凸问题和高度非线性的目标函数。WOA可以自动调整超参数,减少手动调整的工作量,提高超参数搜索的效率。使用WOA来进行CNN-LSTM回归预测模型的超参数寻优可以帮助您找到最佳的超参数配置,提高模型性能。它是一种有效的方法,特别适用于复杂的深度学习模型和大规模数据集。

图片
鲸鱼优化算法(Whale Optimization AlgorithmWOA是一种启发式优化算法,灵感来源于鲸鱼群体中的行为和社会性。这个算法被设计用来解决各种优化问题,尤其是连续型优化问题。WOA的核心思想是模仿鲸鱼群体中的行为,通过模拟鲸鱼的搜索策略来寻找最优解。
下面是鲸鱼优化算法的主要特点和工作原理:
初始种群初始化:WOA中,初始种群是由一组随机生成的鲸鱼个体组成的。每个鲸鱼个体表示一个潜在的解,即超参数组合。
鲸鱼搜索行为:WOA模仿了不同类型鲸鱼的搜索行为,包括:蓝鲸(Blue Whale):随机游动,代表探索阶段。护卫鲸(Humpback Whale):向目标移动,代表局部搜索。巨型鲸(Giant Whale):朝着目标移动,代表全局搜索。这些行为受到鲸鱼生态行为的启发,使得算法能够在搜索空间中平衡探索和利用。
更新个体位置:根据不同类型的鲸鱼行为,每个鲸鱼个体的位置会被更新。更新的过程包括向目标位置移动和更新速度。
适应度评估:在每次迭代中,计算每个个体的适应度,根据问题定义的目标函数来评估。
选择最佳个体:在每次迭代后,选择适应度最好的个体作为当前的最优解。
迭代过程:重复上述步骤,直到满足停止条件(例如,达到最大迭代次数或收敛到满意的解)。
WOA-CNN-LSTM多变量回归预测程序的功能:
1、多变量特征输入,单序列变量输出,输入前一天的特征,实现后一天的预测,超前24步预测。
2、通过WOA优化算法优化学习率、卷积核大小、神经元个数,这3个关键参数,以最小MAPE为目标函数。
3、提供损失、RMSE迭代变化极坐标图;网络的特征可视化图;测试对比图;适应度曲线(若首轮精度最高,则适应度曲线为水平直线)。
4、提供MAPE、RMSE、MAE等计算结果展示。
适用领域:
风速预测、光伏功率预测、发电功率预测、碳价预测等多种应用。

程序出图:

图片
卷积特征可视化:
图片
适应度曲线:

图片

RMSE及损失变化的极坐标表示:(误差内圈大外圈小)

图片

部分代码:

%% 优化算法信息 SearchAgents_no = 2;      %% 搜索个体的数量Max_iter = 10;            %% 最大迭代次数lb = [0.001, 2, 100];     %% 变量下界(学习率,卷积核大小,神经元个数)ub = [0.01, 5, 200];      %% 变量上界(学习率,卷积核大小,神经元个数)dim = 3;                  %% 有几个需要优化的参数就是几维fobj = @objectiveFunction;%% 目标函数
%% 鲸鱼算法WOA优化超参数 [Leader_score, Leader_pos, Convergence_curve, bestPred, bestNet, bestInfo] = WOA(SearchAgents_no, Max_iter, lb, ub, dim, fobj);
%% 优化结果导出Best_Cost = Leader_score; %% 最佳适应度Best_Solution = Leader_pos; %% 最佳网络参数bestPred = bestPred; %% 最佳预测值bestNet = bestNet; %% 最佳网络bestInfo = bestInfo; %% 最佳训练曲线% 显示优化结果disp(['优化所得参数分别为' num2str(Leader_pos)]);
%% 绘制适应度曲线figureplot(Convergence_curve,LineWidth=2,Color=[1 0 0.4]); %% 颜色映射为玫红色R为1; G为0; B为0.4title('鲸鱼优化WOA-CNN-LSTM适应度曲线')
%% %%%%%%%%%%%%%%%%%%% 绘制优化迭代曲线 %%%%%%%%%%%%%%%%%%%%%%%%% 损失迭代变化曲线num_iterations = size(bestInfo.TrainingLoss,2);train_curve = smooth((bestInfo.TrainingLoss),2) ;%% 损失曲线% 定义角度范围(由内到外)theta = linspace(0, 2*pi, num_iterations); % 用于闭合圆形% 转换训练曲线数据为极坐标系下的数据(半径由高到低)rho = max(train_curve) - train_curve;
% 绘制极坐标图figure;polarplot(theta, rho, 'Color', [0.875 0 1], 'LineWidth', 3);% 设置极坐标图属性ax = gca; % 获取当前轴句柄ax.RAxis.Label.String = '训练误差'; % 设置半径标签ax.ThetaAxis.Label.String = '迭代次数'; % 设置角度标签ax.RAxis.Label.FontSize = 12; % 设置标签字体大小ax.ThetaAxis.Label.FontSize = 12;ax.RLim = [0, max(rho)]; % 设置半径范围ax.RTick = [];title('损失迭代变化曲线', 'FontSize', 14);
%% RMSE迭代变化曲线num_iterations = size(bestInfo.TrainingRMSE,2);RMSE_curve = smooth((bestInfo.TrainingRMSE),2) ;%% 损失曲线% 定义角度范围(由内到外)theta = linspace(0, 2*pi, num_iterations); % 用于闭合圆形% 转换训练曲线数据为极坐标系下的数据(半径由高到低)rho = max(RMSE_curve) - RMSE_curve;
% 绘制极坐标图figure;polarplot(theta, rho, 'Color', [0 0.25 1], 'LineWidth', 3);% 设置极坐标图属性ax = gca; % 获取当前轴句柄ax.RAxis.Label.String = '训练误差'; % 设置半径标签ax.ThetaAxis.Label.String = '迭代次数'; % 设置角度标签ax.RAxis.Label.FontSize = 12; % 设置标签字体大小ax.ThetaAxis.Label.FontSize = 12;ax.RLim = [0, max(rho)]; % 设置半径范围ax.RTick = [];title('RMSE迭代变化曲线', 'FontSize', 14);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 绘制某层的特征图,实现特征可视化%激活某一层LayersNeed = activations(bestNet,XTrain,'flatten','OutputAs','channels');% flatten层的特征
% 分析前4个训练样本figure;for i = 1:4 % 前4个样本特征图 i的不能超过训练集单元的个数 LayersFeature = reshape(cell2mat(LayersNeed(i,:)),18,[]); %根据analyzeNetwork分析结果,构造合适尺寸的特征图18*24 subplot(2, 2, i); % 创建该层的第i个子图 image(LayersFeature, 'CDataMapping', 'scaled'); colormap(hsv); xlim([1, size(LayersFeature, 2)]); % 限制坐标轴 ylim([1, size(LayersFeature, 1)]); % 限制坐标轴 axis off; % 关闭坐标轴显示 box on; title(['特征图', num2str(i)]); % 添加特征图标题end

完整代码:https:///o/bread/ZZaVm55t

欢迎感兴趣的小伙伴点击“阅读原文”或上面链接获得完整版代码哦,小编会继续推送更有质量的学习资料、文章程序代码。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多