【DELM分类】基于人工蜂群算法改进深度学习极限学习机实现数据分类附matlab代码

网友投稿 298 2022-09-05


【DELM分类】基于人工蜂群算法改进深度学习极限学习机实现数据分类附matlab代码

1 简介

人工神经网络的最大缺点是训练时间太长从而限制其实时应用范围,近年来,极限学习机(Extreme Learning Machine, ELM)的提出使得前馈神经网络的训练时间大大缩短,然而当原始数据混杂入大量噪声变量时,或者当输入数据维度非常高时,极限学习机算法的综合性能会受到很大的影响.深度学习算法的核心是特征映射,它能够摒除原始数据中的噪声,并且当向低维度空间进行映射时,能够很好的起到对数据降维的作用,因此我们思考利用深度学习的优势特性来弥补极限学习机的弱势特性从而改善极限学习机的性能.为了进一步提升DELM预测精度,本文采用麻雀搜索算法进一步优化DELM超参数,仿真结果表明,改进算法的预测精度更高。

2 部分代码

function [ObjVal,Foods, trace]=ABC1(fit,D,NP,maxCycle,Foods)%% 参数初始化objfun=fit.objfun;ub=fit.ub; lb=fit.lb;D; % 待优化参数个数NP; % 蜂群规模maxCycle; % 最大迭代次数FoodNumber=NP/2; % 蜜源(解)数量,因此NP必须为偶数limit=100; % 当有蜜源连续没被更新的次数超过limit时,该蜜源将被重新初始化% 待优化参数信息ub=ones(1,D)*ub; % 参数取值上界lb=ones(1,D)*lb; % 参数取值下界if nargin<5 Range = repmat((ub-lb),[FoodNumber 1]); Lower = repmat(lb, [FoodNumber 1]); Foods = rand(FoodNumber,D) .* Range + Lower;endBestGlobalMins=[]; %用于存放全局最优解与平均适应度值GlobalMin=inf;GlobalParams=[inf inf];%% 初始化蜜源% 计算每个蜜源(解)得目标函数值,objfun为计算SVM预测的平均平方误差(MSE)的函数,根据自己的实际问题变异目标函数即可ObjVal=ones(1,FoodNumber);for k = 1:FoodNumber ObjVal(k) = objfun(Foods(k,:));endFitness=calculateFitness(ObjVal); % 计算适应度函数值% 标记初始最优蜜源(解)BestInd=find(ObjVal==min(ObjVal));BestInd=BestInd(end);if (ObjVal(BestInd)ub); sol(ind)=ub(ind); % 计算变异后蜜源的目标函数值和适应度函数值 ObjValSol=objfun(sol); FitnessSol=calculateFitness(ObjValSol); % 更新当前蜜源的相关信息 if (FitnessSol>Fitness(i)) Foods(i,:)=sol; Fitness(i)=FitnessSol; ObjVal(i)=ObjValSol; trial(i)=0; % 如果当前蜜源被更新了,则对应的trial归零 else trial(i)=trial(i)+1; % 如果当前蜜源没有被更新,则trial(i)加1 end end %%%%%%%%%%%%%%%%%%%%%%%% 跟随蜂搜索解的过程 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 计算解(蜜源)的概率 prob=(0.9.*Fitness./max(Fitness))+0.1; % 循环初始化 i=1; t=0; while(tub); sol(ind)=ub(ind); % 计算变异后蜜源的目标函数值和适应度函数值 ObjValSol=objfun(sol); FitnessSol=calculateFitness(ObjValSol); % 更新当前蜜源的相关信息 if (FitnessSol>Fitness(i)) Foods(i,:)=sol; Fitness(i)=FitnessSol; ObjVal(i)=ObjValSol; trial(i)=0; % 如果当前蜜源被更新了,则对应的trial归零 else trial(i)=trial(i)+1; % 如果当前蜜源没有被更新,则trial(i)加1 end end i=i+1; % 更新i if (i==(FoodNumber)+1) % 若值超过蜜源数量,则i重新初始化 i=1; end end % 记住最优蜜源 ind=find(ObjVal==min(ObjVal)); ind=ind(end); if (ObjVal(ind)limit) trial(ind)=0; sol=(ub-lb).*rand(1,D)+lb; ObjValSol=objfun(sol); FitnessSol=calculateFitness(ObjValSol); Foods(ind,:)=sol; Fitness(ind)=FitnessSol; ObjVal(ind)=ObjValSol; end average_fit=mean(ObjVal);%计算平均适应度值 BestGlobalMins(iter,:)=[GlobalMin average_fit]; % 记录本次ABC算法的最优目标函数值与平均适应度值 BestGlobalParams(iter,:)=GlobalParams; % 记录本次ABC算法的最优参数 iter=iter+1; end % 一次ABC算法完结 %%trace=BestGlobalMins(:,1);

3 仿真结果

4 参考文献

[1]马萌萌. 基于深度学习的极限学习机算法研究[D]. 中国海洋大学, 2015.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【选址优化】基于粒子群算法求解配电网抢修选址优化问题含Matlab源码
下一篇:Java实现一个简单计算器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~