基于生物地理學(xué)算法 (BBO) 優(yōu)化多層感知器MLP實(shí)現(xiàn)數(shù)據(jù)分類含 PSO、ACO、ES、GA 算法對
?作者簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進(jìn),
代碼獲取、論文復(fù)現(xiàn)及科研仿真合作可私信。
??個人主頁:Matlab科研工作室
??個人信條:格物致知。
更多Matlab完整代碼及仿真定制內(nèi)容點(diǎn)擊??
智能優(yōu)化算法?? ? ??神經(jīng)網(wǎng)絡(luò)預(yù)測?? ? ??雷達(dá)通信?? ? ?無線傳感器?? ? ? ?電力系統(tǒng)
信號處理?? ? ? ? ? ? ?圖像處理?? ? ? ? ? ? ??路徑規(guī)劃?? ? ??元胞自動機(jī)?? ? ? ?無人機(jī)
?? 內(nèi)容介紹
基于生物地理學(xué)算法 (BBO) 優(yōu)化多層感知器MLP實(shí)現(xiàn)數(shù)據(jù)分類含 PSO、ACO、ES、GA 算法
生物地理學(xué)算法 (BBO) 是一種基于生物地理學(xué)理論的啟發(fā)式算法,它模擬了生物種群在地理環(huán)境中的遷徙和適應(yīng)過程。這種算法被廣泛應(yīng)用于解決優(yōu)化問題,如數(shù)據(jù)分類、函數(shù)優(yōu)化等。在本文中,我們將介紹如何利用BBO算法優(yōu)化多層感知器 (MLP) 實(shí)現(xiàn)數(shù)據(jù)分類,并比較其與其他常見優(yōu)化算法如粒子群算法 (PSO)、蟻群算法 (ACO)、進(jìn)化策略 (ES)、遺傳算法 (GA) 的性能。
多層感知器是一種常見的人工神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它由多個神經(jīng)元層組成,每個神經(jīng)元層都與下一層全連接。MLP在數(shù)據(jù)分類、模式識別等領(lǐng)域有著廣泛的應(yīng)用,但其性能很大程度上取決于網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)的選擇。因此,優(yōu)化MLP的結(jié)構(gòu)和參數(shù)對于提高其分類性能至關(guān)重要。
在本研究中,我們提出了一種基于BBO算法的MLP優(yōu)化方法。首先,我們將MLP的結(jié)構(gòu)和參數(shù)表示為一個優(yōu)化問題,其中目標(biāo)是最大化分類準(zhǔn)確率。然后,我們利用BBO算法來搜索最優(yōu)解,通過模擬生物種群的遷徙和適應(yīng)過程,不斷優(yōu)化MLP的結(jié)構(gòu)和參數(shù)。實(shí)驗(yàn)結(jié)果表明,基于BBO算法的MLP優(yōu)化方法在數(shù)據(jù)分類任務(wù)中取得了較好的性能,相較于傳統(tǒng)的PSO、ACO、ES、GA算法,具有更快的收斂速度和更高的分類準(zhǔn)確率。
與PSO算法相比,BBO算法能夠更好地避免陷入局部最優(yōu)解,同時具有更強(qiáng)的全局搜索能力。與ACO算法相比,BBO算法能夠更快地收斂到最優(yōu)解,同時具有更好的魯棒性。與ES算法相比,BBO算法能夠更穩(wěn)定地優(yōu)化MLP的結(jié)構(gòu)和參數(shù),同時具有更高的分類準(zhǔn)確率。與GA算法相比,BBO算法能夠更快地找到最優(yōu)解,同時具有更好的收斂性能。
基于生物地理學(xué)的優(yōu)化器 (BBO) 被用作多層感知器 (MLP) 的訓(xùn)練器。當(dāng)前的源代碼是用于解決虹膜分類問題的 BBO-MLP 訓(xùn)練器的演示。本次提交中還有其他訓(xùn)練器:粒子群優(yōu)化(PSO)、蟻群優(yōu)化(ACO)、遺傳算法(GA)、進(jìn)化策略(ES)和基于概率的增量學(xué)習(xí)(PBIL)。BBO-MLP 的分類精度在 main.m 文件末尾計算,并與?PSO、ACO、ES、GA?和 PBIL 的分類精度進(jìn)行比較。最后繪制了各算法的收斂曲線和分類精度。
綜上所述,基于BBO算法的MLP優(yōu)化方法在數(shù)據(jù)分類任務(wù)中具有較好的性能,相較于傳統(tǒng)的PSO、ACO、ES、GA算法,具有更快的收斂速度和更高的分類準(zhǔn)確率。未來,我們將進(jìn)一步研究BBO算法在其他優(yōu)化問題中的應(yīng)用,并探索其在神經(jīng)網(wǎng)絡(luò)優(yōu)化中的潛在價值。
?? 部分代碼
% ? ? ?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'});
?? 運(yùn)行結(jié)果

?? 參考文獻(xiàn)
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