【FNN分类】基于粒子群结合引力搜索算法优化前向反馈神经网络实现数据分类附matlab代码
1 内容介绍
引力搜索算法(GSA)是一种基于引力定律和质量相互作用的新型启发式优化方法。实践证明,该算法具有较好的全局最优搜索能力,但在最后一次迭代中存在搜索速度较慢的问题。这项工作提出了粒子群优化 (PSO) 和 GSA 的混合体来解决上述问题。在本文中,GSA 和 PSOGSA 被用作前馈神经网络 (FNN) 的新训练方法,以研究这些算法在减少陷入局部最小值和当前进化学习算法收敛速度慢的问题方面的效率。将结果与标准的基于 PSO 的 FNN 学习算法进行比较。还研究了使用 PSO、GSA 和 PSOGSA 训练的 FNN 的准确度。实验结果表明,在收敛速度和避免局部最小值方面,PSOGSA 在训练 FNN 方面优于 PSO 和 GSA。还证明了用 PSOGSA 训练的 FNN 比用 GSA 训练的 FNN 具有更好的准确性。
2 仿真代码
%% -------------------------------------------------------------------------
clc
clear all
close all
%% Data set preparation/
load iris.txt
x=sortrows(iris,2);
H2=x(1:150,1);
H3=x(1:150,2);
H4=x(1:150,3);
H5=x(1:150,4);
T=x(1:150,5);
H2=H2';
[xf,PS] = mapminmax(H2);
I2(:,1)=xf;
H3=H3';
[xf,PS2] = mapminmax(H3);
I2(:,2)=xf;
H4=H4';
[xf,PS3] = mapminmax(H4);
I2(:,3)=xf;
H5=H5';
[xf,PS4] = mapminmax(H5);
I2(:,4)=xf;
Thelp=T;
T=T';
[yf,PS5]= mapminmax(T);
T=yf;
T=T';
%% /FNN initial parameters//
HiddenNodes=15; %Number of hidden codes
Dim=8*HiddenNodes+3; %Dimension of masses in GSA
TrainingNO=150; %Number of training samples
%% GSA/
%Configurations and initializations
noP = 30; %Number of masses
Max_iteration = 500; %Maximum number of iteration
w=2; %Inirtia weight
wMax=0.9; %Max inirtia weight
wMin=0.5; %Min inirtia weight
CurrentFitness =zeros(noP,1);
G0=1; %Gravitational constant
CurrentPosition = rand(noP,Dim); %Postition vector
Velocity = .3*randn(noP,Dim) ; %Velocity vector
acceleration=zeros(noP,Dim); %Acceleration vector
mass(noP)=0; %Mass vector
force=zeros(noP,Dim);%Force vector
%Vectores for saving the location and MSE of the best mass
gBestScore=inf;
gBest=zeros(1,Dim);
ConvergenceCurve=zeros(1,Max_iteration); %Convergence vector
%Main loop
Iteration = 0 ;
while ( Iteration < Max_iteration )
Iteration = Iteration + 1;
G=G0*exp(-20*Iteration/Max_iteration); %Equation (3.3)
force=zeros(noP,Dim);
mass(noP)=0;
acceleration=zeros(noP,Dim);
%Calculate MSEs
for i = 1:noP
for ww=1:(7*HiddenNodes)
Weights(ww)=CurrentPosition(i,ww);
end
for bb=7*HiddenNodes+1:Dim
Biases(bb-(7*HiddenNodes))=CurrentPosition(i,bb);
end
fitness=0;
for pp=1:TrainingNO
actualvalue=My_FNN(4,HiddenNodes,3,Weights,Biases,I2(pp,1),I2(pp,2), I2(pp,3),I2(pp,4));
if(T(pp)==-1)
fitness=fitness+(1-actualvalue(1))^2;
fitness=fitness+(0-actualvalue(2))^2;
fitness=fitness+(0-actualvalue(3))^2;
end
if(T(pp)==0)
fitness=fitness+(0-actualvalue(1))^2;
fitness=fitness+(1-actualvalue(2))^2;
fitness=fitness+(0-actualvalue(3))^2;
end
if(T(pp)==1)
fitness=fitness+(0-actualvalue(1))^2;
fitness=fitness+(0-actualvalue(2))^2;
fitness=fitness+(1-actualvalue(3))^2;
end
end
fitness=fitness/TrainingNO; %Equation (5.4)
CurrentFitness(i) = fitness;
if(gBestScore>fitness)
gBestScore=fitness;
gBest=CurrentPosition(i,:);
end
end
best=min(CurrentFitness);%Equation (3.10)
worst=max(CurrentFitness);%Equation (3.11)
for i=1:noP
mass(i)=(CurrentFitness(i)-0.99*worst)/(best-worst);%Equation (3.9)
end
for i=1:noP
mass(i)=mass(i)*5/sum(mass);%Equation (3.14)
end
%Calculate froces
for i=1:noP
for j=1:Dim
for k=1:noP
if(CurrentPosition(k,j)~=CurrentPosition(i,j))
%Equation (3.5)
force(i,j)=force(i,j)+ rand()*G*mass(k)*mass(i)*(CurrentPosition(k,j)-CurrentPosition(i,j))/abs(CurrentPosition(k,j)-CurrentPosition(i,j));
end
end
end
end
%Calculate a
for i=1:noP
for j=1:Dim
if(mass(i)~=0)
acceleration(i,j)=force(i,j)/mass(i);%Equation (3.6)
end
end
end
%Update inertia weight
w=wMin-Iteration*(wMax-wMin)/Max_iteration;
%Calculate V
for i=1:noP
for j=1:Dim
%Equation (4.1)
Velocity(i,j)=w*Velocity(i,j)+rand()*acceleration(i,j) + rand()*(gBest(j)-CurrentPosition(i,j));
end
end
%Calculate X
CurrentPosition = CurrentPosition + Velocity ; %Equation (4.2)
ConvergenceCurve(1,Iteration)=gBestScore;
disp(['PSOGSA is training FNN (Iteration = ', num2str(Iteration),' ,MSE = ', num2str(gBestScore),')'])
end
%% ///Calculate the classification//
Rrate=0;
Weights=gBest(1:7*HiddenNodes);
Biases=gBest(7*HiddenNodes+1:Dim);
for pp=1:TrainingNO
actualvalue=My_FNN(4,HiddenNodes,3,Weights,Biases,I2(pp,1),I2(pp,2), I2(pp,3),I2(pp,4));
if(T(pp)==-1)
if (round(actualvalue(1))==1 && round(actualvalue(2))==0 && round(actualvalue(3))==0)
Rrate=Rrate+1;
end
end
if(T(pp)==0)
if (round(actualvalue(1))==0 && round(actualvalue(2))==1 && round(actualvalue(3))==0)
Rrate=Rrate+1;
end
end
if(T(pp)==1)
if (round(actualvalue(1))==0 && round(actualvalue(2))==0 && round(actualvalue(3))==1)
Rrate=Rrate+1;
end
end
end
ClassificationRate=(Rrate/TrainingNO)*100;
disp(['Classification rate = ', num2str(ClassificationRate)]);
%% Draw the convergence curve
hold on;
semilogy(ConvergenceCurve);
title(['Classification rate : ', num2str(ClassificationRate), '%']);
xlabel('Iteration');
ylabel('MSE');
box on
grid on
axis tight
hold off;
3 运行结果
4 参考文献
[1] Mirjalili S A , Hashim S , Sardroudi H M . Training feedforward neural networks using hybrid particle swarm optimization and gravitational search algorithm[J]. Applied Mathematics & Computation, 2012, 218(22):11125-11137.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
【FNN分类】基于粒子群结合引力搜索算法优化前向反馈神经网络实现数据分类附matlab代码相关推荐
- 【PNN分类】基于麻雀算法优化pnn神经网络实现数据分类附matlab代码
1 简介 概率神经网络(Probabilistic Neural Network,简称PNN)是利用贝叶斯定理和基于风险最小的贝叶斯决策规则对新样本进行分类的神经网络,具有训练时间短且不易收敛到局部极 ...
- 【DBN分类】基于粒子群算法优化深度置信网络PSO-DBN实现数据分类附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【ElM分类】基于哈里斯鹰优化ElM神经网络实现数据分类附matlab代码
1 简介 为了提高核极限学习机(ELM)的分类正确率,采用哈里斯鹰算法(HHO)对惩罚系数,宽度参数两个参数进行优化.首先,根据乳腺良恶性肿瘤数据库训练集并利用哈里斯鹰算法优化核极限学习机;然后,通过 ...
- 【DBN分类】基于哈里斯鹰算法优化深度置信网络HHO-DBN实现数据分类附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【预测模型-BP分类】基于人工蜂群算法优化BP神经网络实现数据分类附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【DBN分类】基于麻雀算法优化深度置信网络SSA-DBN实现数据分类附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【预测模型-ElM分类】基于松鼠算法优化ElM神经网络实现数据分类附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【预测模型-BP分类】基于蝙蝠算法优化BP神经网络实现数据分类附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【BP分类】基于鸟群算法优化BP神经网络实现数据分类附matlab代码
1 简介 BSA 算法优化 BP 神经网络的基本思想是: 利 用 BSA 算法的全局搜索能力, 优化 BP 神经网络初始的权值和阈值, 也就是决策变量, 其中每一组决策变量均包含在鸟群个体所处的空间 ...
最新文章
- “此文件来自其他计算机,可能被阻止以帮助保护该计算机” 教你win7解除阻止程序运行怎么操作...
- 文件上传--Smartupload上传组件【上】
- 嵌入式研发人员的核心竞争力浅谈 .
- 《软件架构与设计模式》关于 抽象工厂模式 的一个小例子
- Silverlight+WCF 新手实例 象棋 介绍(一)
- 日语学习-多邻国-关卡1-学校
- 20200814:力扣201周周赛题解记录上
- mysql的txid是什么_mysql-存储引擎
- 拓端tecdat|R语言画ROC曲线总结
- 在win7 64位上安装VS2015的问题汇总
- c++ opencv图像中选择点显示点的坐标_如何使用OpenCV进行Delaunay三角剖分和Voronoi图...
- linux中用户信息存储在,在linux中,用于存放用户信息的两个文件是/etc/passwd和/etc/shadow。()...
- 3D打印——从solidworks到打印机(含打印机常见问题及解决方法)
- centos 7之firewalld防火墙配置IP伪装和端口转发案例详解
- Cuba 设置debug模式
- 什么是BASE最终一致性
- 太厉害了!28岁任北大博导的她,再获科学大奖!
- oracle归档日志存储路径,oracle 归档日志路径三个参数DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST和LOG_ARCHIVE_DEST_n的关系...
- 百度新闻爬虫搜索引擎实战---爬虫篇(1)
- 端到端测试框架Cypress简介