基于生物地理学算法 (BBO) 优化多层感知器MLP实现数据分类含 PSO、ACO、ES、GA 算法对
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,
代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统
信号处理 图像处理 路径规划 元胞自动机 无人机
🔥 内容介绍
基于生物地理学算法 (BBO) 优化多层感知器MLP实现数据分类含 PSO、ACO、ES、GA 算法
生物地理学算法 (BBO) 是一种基于生物地理学理论的启发式算法,它模拟了生物种群在地理环境中的迁徙和适应过程。这种算法被广泛应用于解决优化问题,如数据分类、函数优化等。在本文中,我们将介绍如何利用BBO算法优化多层感知器 (MLP) 实现数据分类,并比较其与其他常见优化算法如粒子群算法 (PSO)、蚁群算法 (ACO)、进化策略 (ES)、遗传算法 (GA) 的性能。
多层感知器是一种常见的人工神经网络结构,它由多个神经元层组成,每个神经元层都与下一层全连接。MLP在数据分类、模式识别等领域有着广泛的应用,但其性能很大程度上取决于网络结构和参数的选择。因此,优化MLP的结构和参数对于提高其分类性能至关重要。
在本研究中,我们提出了一种基于BBO算法的MLP优化方法。首先,我们将MLP的结构和参数表示为一个优化问题,其中目标是最大化分类准确率。然后,我们利用BBO算法来搜索最优解,通过模拟生物种群的迁徙和适应过程,不断优化MLP的结构和参数。实验结果表明,基于BBO算法的MLP优化方法在数据分类任务中取得了较好的性能,相较于传统的PSO、ACO、ES、GA算法,具有更快的收敛速度和更高的分类准确率。
与PSO算法相比,BBO算法能够更好地避免陷入局部最优解,同时具有更强的全局搜索能力。与ACO算法相比,BBO算法能够更快地收敛到最优解,同时具有更好的鲁棒性。与ES算法相比,BBO算法能够更稳定地优化MLP的结构和参数,同时具有更高的分类准确率。与GA算法相比,BBO算法能够更快地找到最优解,同时具有更好的收敛性能。
基于生物地理学的优化器 (BBO) 被用作多层感知器 (MLP) 的训练器。当前的源代码是用于解决虹膜分类问题的 BBO-MLP 训练器的演示。本次提交中还有其他训练器:粒子群优化(PSO)、蚁群优化(ACO)、遗传算法(GA)、进化策略(ES)和基于概率的增量学习(PBIL)。BBO-MLP 的分类精度在 main.m 文件末尾计算,并与 PSO、ACO、ES、GA 和 PBIL 的分类精度进行比较。最后绘制了各算法的收敛曲线和分类精度。
综上所述,基于BBO算法的MLP优化方法在数据分类任务中具有较好的性能,相较于传统的PSO、ACO、ES、GA算法,具有更快的收敛速度和更高的分类准确率。未来,我们将进一步研究BBO算法在其他优化问题中的应用,并探索其在神经网络优化中的潜在价值。
📣 部分代码
% Biogeography-Based Optimization (BBO) trainer for MLP %
% source codes version 1 %
% %
clc
clear all
close all
% For modifying initial parameters please have a look at init.m file
display('..........................................................................................')
display('BBO is training MLP ...')
display('..........................................................................................')
[cg_curve1,Hamming,best] = BBO(@MLP_Iris, 1, 1, 300); % BBO trainer
Best_W_B(1,:)=best;
display('..........................................................................................')
display('PSO is training MLP ...')
display('..........................................................................................')
[cg_curve2,best]= PSO(@MLP_Iris, 1); % PSO trainer
Best_W_B(2,:)=best;
display('..........................................................................................')
display('GA is training MLP ...')
display('..........................................................................................')
[cg_curve3,best]= GA(@MLP_Iris, 1); % GA trainer
Best_W_B(3,:)=best;
display('..........................................................................................')
display('ACO is training MLP ...')
display('..........................................................................................')
[cg_curve4,best]= ACO(@MLP_Iris, 1); % ACO trainer
Best_W_B(4,:)=best;
display('..........................................................................................')
display('ES is training MLP ...')
display('..........................................................................................')
[cg_curve5,best]= ES(@MLP_Iris, 1); % ES trainer
Best_W_B(5,:)=best;
display('..........................................................................................')
display('PBIL is training MLP ...')
display('..........................................................................................')
[cg_curve6,best]=PBIL(@MLP_Iris, 1); % PBIL trainer
Best_W_B(6,:)=best;
% Calculating classification rates
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); % Normalzation of input
I2(:,1)=xf;
H3=H3';
[xf,PS2] = mapminmax(H3); % Normalzation of input
I2(:,2)=xf;
H4=H4';
[xf,PS3] = mapminmax(H4); % Normalzation of input
I2(:,3)=xf;
H5=H5';
[xf,PS4] = mapminmax(H5); % Normalzation of input
I2(:,4)=xf;
Thelp=T;
T=T';
[yf,PS5]= mapminmax(T); % Normalzation of output
T=yf;
T=T';
for i=1:6
Rrate=0;
W=Best_W_B(i,1:63);
B=Best_W_B(i,64:75);
for pp=1:150
actualvalue=my_MLP(4,9,3,W,B,I2(pp,1),I2(pp,2), I2(pp,3),I2(pp,4));
if(T(pp)==-1)
if (actualvalue(1)>=0.95 && actualvalue(2)<0.05 && actualvalue(3)<0.05)
Rrate=Rrate+1;
end
end
if(T(pp)==0)
if (actualvalue(1)<0.05 && actualvalue(2)>=0.95 && actualvalue(3)<0.05)
Rrate=Rrate+1;
end
end
if(T(pp)==1)
if (actualvalue(1)<0.05 && actualvalue(2)<0.05 && actualvalue(3)>=0.95)
Rrate=Rrate+1;
end
end
end
Final_Classification_Rates(1,i)=(Rrate/150)*100;
end
display('--------------------------------------------------------------------------------------------')
display('Classification rate')
display(' BBO PSO GA ACO ES PBIL')
display(Final_Classification_Rates(1:6))
display('--------------------------------------------------------------------------------------------')
figure('Position',[500 500 660 290])
%Draw convergence curves
subplot(1,2,1);
hold on
title('Convergence Curves')
semilogy(cg_curve1,'Color','r')
semilogy(cg_curve2,'Color','k')
semilogy(cg_curve3,'Color','b')
semilogy(cg_curve4,'Color','r')
semilogy(cg_curve5,'Color','g')
semilogy(cg_curve6,'Color','c')
xlabel('Generation');
ylabel('MSE');
axis tight
grid on
box on
legend('BBO','PSO', 'GA', 'ACO', 'ES', 'PBIL')
%Draw classification rates
subplot(1,2,2);
hold on
title('Classification Accuracies')
bar(Final_Classification_Rates)
xlabel('Algorithm');
ylabel('Classification rate (%)');
grid on
box on
set(gca,'XTickLabel',{'BBO','PSO', 'GA', 'ACO', 'ES', 'PBIL'});
⛳️ 运行结果

🔗 参考文献
S. Mirjalili, SM Mirjalili, A. Lewis, Let A Biogeography-Based Optimizer Train Your Multi-Layer Perceptron, Information Sciences, In press, 2014, DOI: http://dx . doi.org/10.1016/j.ins.2014.01.038