【ELMAN回归预测】基于matlab麻雀搜索算法SSA优化ELMAN神经网络回归预测(多输入单输出)【含Matlab源码 2489期】

⛄一、麻雀算法简介

1 标准麻雀算法
算法运算过程由探索者、追随者与预警者3部分构成,其中探索者与追随者的总数量与比例不变,根据适应度数值的改变,两者可以相互转化。通过觅食和反捕食行为来不断更新种群成员最优位置。

设种群数量为n,在第K次迭代中,探索者的位置更新方式如下:
在这里插入图片描述
追随者的位置更新方式如下:
在这里插入图片描述
预警者在种群中的比例在10%~20%,位置更新方式如下:
在这里插入图片描述

⛄二、部分源代码

%% 初始化
clear
close all
clc
warning off

%% 数据读取
data=xlsread(‘数据.xlsx’,‘Sheet1’,‘A1:N252’); %%使用xlsread函数读取EXCEL中对应范围的数据即可

%输入输出数据
input=data(:,1:end-1); %data的第一列-倒数第二列为特征指标
output=data(:,end); %data的最后面一列为输出的指标值

N=length(output); %全部样本数目
testNum=15; %设定测试样本数目
trainNum=N-testNum; %计算训练样本数目

%% 划分训练集、测试集
input_train = input(1:trainNum,:)‘;
output_train =output(1:trainNum)’;
input_test =input(trainNum+1:trainNum+testNum,:)‘;
output_test =output(trainNum+1:trainNum+testNum)’;

%% 数据归一化
[inputn,inputps]=mapminmax(input_train,0,1);
[outputn,outputps]=mapminmax(output_train);
inputn_test=mapminmax(‘apply’,input_test,inputps);

%% 获取输入层节点、输出层节点个数
inputnum=size(input,2);
outputnum=size(output,2);
disp(‘/’)
disp(‘神经网络结构…’)
disp([‘输入层的节点数为:’,num2str(inputnum)])
disp([‘输出层的节点数为:’,num2str(outputnum)])
disp(’ ')
disp(‘隐含层节点的确定过程…’)

%确定隐含层节点个数
%采用经验公式hiddennum=sqrt(m+n)+a,m为输入层节点个数,n为输出层节点个数,a一般取为1-10之间的整数
MSE=1e+5; %初始化最小误差
for hiddennum=fix(sqrt(inputnum+outputnum))+1:fix(sqrt(inputnum+outputnum))+10

%构建网络
net=newelm(inputn,outputn,hiddennum);
% 网络参数
net.trainParam.epochs=1000;         % 训练次数
net.trainParam.lr=0.01;                   % 学习速率
net.trainParam.goal=0.000001;        % 训练目标最小误差
% 网络训练
net=train(net,inputn,outputn);
an0=sim(net,inputn);  %仿真结果
mse0=mse(outputn,an0);  %仿真的均方误差
disp(['隐含层节点数为',num2str(hiddennum),'时,训练集的均方误差为:',num2str(mse0)])

%更新最佳的隐含层节点
if mse0<MSE
    MSE=mse0;
    hiddennum_best=hiddennum;
end

end
disp([‘最佳的隐含层节点数为:’,num2str(hiddennum_best),‘,相应的均方误差为:’,num2str(MSE)])

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]仝卫国,郭超宇,赵如意.基于改进麻雀算法优化LSSVM的再循环箱浆液密度预测模型[J].电子测量技术. 2022,45(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/129903552