【预测模型-ElM分类】基于松鼠算法优化ElM神经网络实现数据分类附matlab代码

简介: 【预测模型-ElM分类】基于松鼠算法优化ElM神经网络实现数据分类附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机

⛄ 内容介绍

为了提高极限学习机(ELM)数据分类的精度,提出了松鼠算法(SSA)的ELM分类器参数优化方法(SSA-ELM),将CV训练所得多个模型的平均精度作为SSA的适应度评价函数,为ELM的参数优化提供评价标准,用获得SSA优化最优参数的ELM算法进行数据分类.利用UCI中数据集进行仿真.

⛄ 部分代码

% Differential Squirrel Search Algorithm (DSSA) source Code Version 1.0

%

% Developed in MATLAB R2018b

%

% Programmers:

% Bibekananda Jena and Dr Manoj Kumar Naik

% _____________________________________________________________________________________________________

% Please cite to the main paper:

% ******************************

% B. Jena, M. K. Naik, A. Wunnava, and R. Panda,

% 揂 Differential Squirrel Search Algorithm,?

% S. Das and M. N. Mohanty, Eds. Singapore: Springer Singapore, 2021, pp. 143?52.

% https://doi.org/10.1007/978-981-16-0695-3_15

%_____________________________________________________________________________________________________


%%

function [Destination_fitness,bestPositions,Convergence_curve]=SSA(NP,Max_iter,lb,ub,npar,fobj)


% Constant initialization and memory initialization

Gc=1.9; % Gliding constant

Cr=0.5; % crossover rate

dg=0.8; %Random gliding distance

Pdp=0.1; %predator presence probability

Convergence_curve=zeros(1,Max_iter);

Fitness=ones(1,NP)*inf;


% Initialization of the Squirrel初始化

Pos=initialization(NP,npar,ub,lb);


% Fitness evalaution of each Squirrel

%每只松鼠的适合度评估

for i=1:NP

   Fitness(i)=fobj(Pos(i,:));

end


% Segregating the Squirrel into hickory, acorn and normal tree

%将松鼠分为山核桃树、橡子树和普通树

[Sorted_fitness,Sort_index]=sort(Fitness);

Pos_hickory=Pos(Sort_index(1),:); % best solution (hickory tree)

Pos_acorn=Pos(Sort_index(2:4),:); % acorn tree

Pos_normal=Pos(Sort_index(5:end),:); % normal tree


L=size(Pos_normal,1);

L1=randperm(L);


% Squirrels in normal tree splitted into two sets randomly

%正常树上的松鼠随机分成两组

Pnormal_1=Pos_normal(L1(1:end-10),:);

Pnormal_2=Pos_normal(L1(end-10+1:end),:);

G=Sorted_fitness(1); % best fitness

Convergence_curve(1)=Sorted_fitness(1);


for itr=2:Max_iter

   Pos_avg=mean(Pos,1); % average of all squirrels position in the current population所有松鼠在当前种群中的平均位置

   %Temporary new location of squirrels in acorn and normal trees松鼠在橡树和正常的树临时的新位置

   Pacorn_tree=[];

   Pnormal_1_tree=[];

   Pnormal_2_tree=[];

   

   %New locations of squirrels present in the acorn trees松鼠出现在橡子树上的新位置

   for i=1:3

       if rand>Pdp

           Pacorn_tree(i,:)=Pos_acorn(i,:)+dg*Gc*(Pos_hickory-Pos_acorn(i,:)-Pos_avg);  %Eq(1)

       else

           Xrand=initialization(1,npar,ub,lb);

           Pacorn_tree(i,:)=Xrand-rand(1,npar).*abs(Xrand-2*rand*Pos_acorn(i,:));

       end

       

   end

   

   %New locations of some of the squirrels present in the normal trees一些松鼠的新位置出现在正常的树上

   for i=1:size(Pnormal_1,1)

       if rand>Pdp

           k=randi(3,1);

           Pnormal_1_tree(i,:)=Pnormal_1(i,:)+dg*Gc*(Pos_acorn(k,:)-Pnormal_1(i,:));   %Eq(3)

       else

           Xrand=initialization(1,npar,ub,lb);

           Pnormal_1_tree(i,:)=Xrand-rand(1,npar).*abs(Xrand-2*rand*Pnormal_1(i,:));

       end

       

   end

   

   

   %New locations of remaining squirrels present in the normal trees现存松鼠的新位置出现在正常的树上

   for i=1:size(Pnormal_2,1)

       if rand>Pdp

           Pnormal_2_tree(i,:)=Pnormal_2(i,:)+dg*Gc*(Pos_hickory-Pnormal_2(i,:));   %Eq(4)

       else

           Xrand=initialization(1,npar,ub,lb);

           Pnormal_2_tree(i,:)=Xrand-rand*abs(Xrand-2*rand*Pnormal_2(i,:));

       end

       

   end

   Pnt=[Pnormal_1_tree; Pnormal_2_tree];

   Ph1=Pos_hickory+dg*Gc*(Pos_hickory-mean(Pos_acorn,1));   %Eq(6)

   if fobj(Ph1)<fobj(Pos_hickory)

       Pos_hickory=Ph1;

   end

   Pnew=[Pos_hickory; Pacorn_tree; Pnt];

   

   FTnew=[];

   

   % Updating the population

   for i=1:NP

       FTnew(i)=fobj(Pnew(i,:));

       if FTnew(i)<Fitness(i)

           Fitness(i)=FTnew(i);

           Pos(i,:)=Pnew(i);

       else

           Pos(i,:)=Pos(i,:);

           Fitness(i)=Fitness(i);

       end

   end

   [Sorted_fitness,Sort_index]=sort(Fitness);

   

   % Update Best squirrel positions in hickory tree更新山核桃树上最好的松鼠位置

   if Sorted_fitness(1)<G(itr-1)

       Pos_hickory=sort(Pos(Sort_index(1),:),2);

       G(itr)=Sorted_fitness(1);

   else

       G(itr)=G(itr-1);

   end

   

   %Updated locations of squirrels in acorn trees更新了橡子树上松鼠的位置

   Pos_acorn=Pos(Sort_index(2:4),:);

   

   %Updated locations of squirrels in normal trees更新松鼠在正常树上的位置

   Pos_normal=Pos(Sort_index(5:end),:);

   L=size(Pos_normal,1);

   L1=randperm(L);

   Pnormal_1=Pos_normal(L1(1:end-10),:);

   Pnormal_2=Pos_normal(L1(end-10+1:end),:);

   

   % Keeping all iteration best fitness value保持所有迭代的最佳适应度值

   Convergence_curve(itr)=G(itr);

end

Destination_fitness=Convergence_curve(end);

bestPositions=Pos_hickory;

end

⛄ 运行结果

⛄ 参考文献


❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3天前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
3天前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
13天前
|
监控 安全 Linux
【专栏】Linux中六个常用的网络命令:ping、traceroute、netstat、nmap、ifconfig和ip
【4月更文挑战第28天】本文介绍了Linux中六个常用的网络命令:ping、traceroute、netstat、nmap、ifconfig和ip,以及它们在测试网络连通性、追踪路由、查看网络状态、安全扫描和接口配置等场景的应用。通过学习和运用这些命令,系统管理员和网络爱好者能更有效地诊断和管理网络问题,确保网络稳定运行。
|
14天前
|
网络协议 算法 Linux
【Linux】深入探索:Linux网络调试、追踪与优化
【Linux】深入探索:Linux网络调试、追踪与优化
|
3天前
|
域名解析 网络协议 Linux
linux网络配置详解
linux网络配置详解
12 0
|
4天前
|
网络协议 Java Linux
【探索Linux】P.29(网络编程套接字 —— 简单的TCP网络程序模拟实现)
【探索Linux】P.29(网络编程套接字 —— 简单的TCP网络程序模拟实现)
10 0
|
4天前
|
存储 网络协议 算法
【探索Linux】P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)
【探索Linux】P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)
11 0
|
4天前
|
网络协议 算法 Linux
【探索Linux】P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)
【探索Linux】P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)
14 0
|
4天前
|
存储 算法 网络协议
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
12 0