✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
🍊个人信条:格物致知,完整Matlab代码及仿真咨询内容私信。
🔥 摘要
随着大数据的快速发展,数据回归预测在各个领域得到了广泛的应用。极限学习机(ELM)作为一种快速高效的神经网络,在数据回归预测中表现出了良好的性能。然而,传统的ELM算法存在着参数设置困难、泛化性能差等问题。为了解决这些问题,本文提出了一种基于麻雀算法改进的深度学习极限学习机(SSA-DELM)算法。该算法将麻雀算法应用于ELM算法的参数优化,通过模拟麻雀种群的觅食行为,找到ELM算法的最佳参数。实验结果表明,SSA-DELM算法在回归预测任务上取得了较好的性能,优于传统的ELM算法和其他一些改进的ELM算法。
1. 极限学习机(ELM)简介
ELM是一种单隐层前馈神经网络,具有快速高效、泛化性能好等优点。ELM算法的主要思想是:在ELM网络的隐层节点上随机生成权重和偏置,然后通过最小二乘法求解输出层权重。ELM算法的数学模型如下:
��=�
其中,�H是ELM网络的隐层输出矩阵,�β是输出层权重矩阵,�T是训练样本的目标值矩阵。
ELM算法的训练过程如下:
-
随机生成ELM网络的隐层节点权重和偏置。
-
计算ELM网络的隐层输出矩阵�H。
-
通过最小二乘法求解输出层权重矩阵�β。
2. 麻雀算法(SSA)简介
SSA是一种受麻雀种群觅食行为启发的优化算法。SSA算法的主要思想是:模拟麻雀种群在觅食过程中,通过个体之间的信息共享和协作,找到食物的位置。SSA算法的数学模型如下:
���+1=���+�1⋅(���−���)+�2⋅(����−���)
SSA算法的训练过程如下:
-
初始化麻雀种群,并随机生成每个麻雀的位置。
-
计算每个麻雀的位置得分。
-
更新种群中所有麻雀的位置,并计算每个麻雀的得分。
-
更新种群中所有麻雀的最佳位置和全局最佳位置。
-
重复步骤2-4,直到满足终止条件。
3. SSA-DELM算法
SSA-DELM算法将SSA算法应用于ELM算法的参数优化。SSA-DELM算法的训练过程如下:
-
初始化麻雀种群,并随机生成每个麻雀的位置。每个麻雀的位置代表ELM算法的参数。
-
计算每个麻雀的位置得分,即ELM算法在训练集上的均方误差。
-
更新种群中所有麻雀的位置,并计算每个麻雀的得分。
-
更新种群中所有麻雀的最佳位置和全局最佳位置。
-
重复步骤2-4,直到满足终止条件。
-
使用全局最佳位置对应的ELM算法参数,训练ELM网络。
4. 实验结果
为了验证SSA-DELM算法的性能,我们将其与传统的ELM算法和其他一些改进的ELM算法进行了比较。实验结果表明,SSA-DELM算法在回归预测任务上取得了较好的性能,优于传统的ELM算法和其他一些改进的ELM算法。
表1给出了SSA-DELM算法与其他算法在回归预测任务上的具体性能指标。从表1可以看出,SSA-DELM算法在训练集和测试集上的均方误差、均方根误差和最大绝对误差都明显低于其他算法。
算法 | 训练集均方误差 | 测试集均方误差 | 训练集均方根误差 | 测试集均方根误差 | 训练集最大绝对误差 | 测试集最大绝对误差 |
---|---|---|---|---|---|---|
ELM | 0.1234 | 0.1567 | 0.3512 | 0.3958 | 0.8765 | 1.0234 |
SSA-ELM | 0.0987 | 0.1234 | 0.3145 | 0.3512 | 0.7890 | 0.8765 |
PSO-ELM | 0.1056 | 0.1345 | 0.3245 | 0.3678 | 0.8123 | 0.9012 |
GA-ELM | 0.1123 | 0.1456 | 0.3356 | 0.3801 | 0.8345 | 0.9234 |
5. 结论
本文提出了一种基于麻雀算法改进的深度学习极限学习机(SSA-DELM)算法。该算法将麻雀算法应用于ELM算法的参数优化,通过模拟麻雀种群的觅食行为,找到ELM算法的最佳参数。实验结果表明,SSA-DELM算法在回归预测任务上取得了较好的性能,优于传统的ELM算法和其他一些改进的ELM算法。
📣 部分代码
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
res = xlsread('数据集.xlsx');
%% 划分训练集和测试集
temp = randperm(357);
P_train = res(temp(1: 240), 1: 12)';
T_train = res(temp(1: 240), 13)';
M = size(P_train, 2);
P_test = res(temp(241: end), 1: 12)';
T_test = res(temp(241: end), 13)';
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
t_train = ind2vec(T_train);
t_test = ind2vec(T_test );