做英語(yǔ)網(wǎng)站百度一下你就知道 官網(wǎng)
基于人工蜂鳥(niǎo)優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)(分類(lèi)應(yīng)用) - 附代碼
文章目錄
- 基于人工蜂鳥(niǎo)優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)(分類(lèi)應(yīng)用) - 附代碼
- 1.鳶尾花iris數(shù)據(jù)介紹
- 2.數(shù)據(jù)集整理
- 3.人工蜂鳥(niǎo)優(yōu)化BP神經(jīng)網(wǎng)絡(luò)
- 3.1 BP神經(jīng)網(wǎng)絡(luò)參數(shù)設(shè)置
- 3.2 人工蜂鳥(niǎo)算法應(yīng)用
- 4.測(cè)試結(jié)果:
- 5.Matlab代碼
摘要:本文主要介紹如何用人工蜂鳥(niǎo)算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò),利用鳶尾花數(shù)據(jù),做一個(gè)簡(jiǎn)單的講解。
1.鳶尾花iris數(shù)據(jù)介紹
本案例利用matlab公用的iris鳶尾花數(shù)據(jù),作為測(cè)試數(shù)據(jù),iris數(shù)據(jù)是特征為4維,類(lèi)別為3個(gè)類(lèi)別。數(shù)據(jù)格式如下:
特征1 | 特征2 | 特征3 | 類(lèi)別 | |
---|---|---|---|---|
單組iris數(shù)據(jù) | 5.3 | 2.1 | 1.2 | 1 |
3種類(lèi)別用1,2,3表示。
2.數(shù)據(jù)集整理
iris數(shù)據(jù)總共包含150組數(shù)據(jù),將其分為訓(xùn)練集105組,測(cè)試集45組。如下表所示:
訓(xùn)練集(組) | 測(cè)試集(組) | 總數(shù)據(jù)(組) |
---|---|---|
105 | 45 | 150 |
類(lèi)別數(shù)據(jù)處理:原始數(shù)據(jù)類(lèi)別用1,2,3表示為了方便神經(jīng)網(wǎng)絡(luò)訓(xùn)練,類(lèi)別1,2,3分別用1,0,0;0,1,0;0,0,1表示。
當(dāng)進(jìn)行數(shù)據(jù)訓(xùn)練對(duì)所有輸入特征數(shù)據(jù)均進(jìn)行歸一化處理。
3.人工蜂鳥(niǎo)優(yōu)化BP神經(jīng)網(wǎng)絡(luò)
3.1 BP神經(jīng)網(wǎng)絡(luò)參數(shù)設(shè)置
通常而言,利用智能算法一般優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的初始權(quán)值和閾值來(lái)改善BP神經(jīng)網(wǎng)絡(luò)的性能。本案例基于iris數(shù)據(jù),由于iris數(shù)據(jù)維度不高,采用簡(jiǎn)單的BP神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)參數(shù)如下:
神經(jīng)網(wǎng)絡(luò)參數(shù)如下:
%創(chuàng)建神經(jīng)網(wǎng)絡(luò)
inputnum = 4; %inputnum 輸入層節(jié)點(diǎn)數(shù) 4維特征
hiddennum = 10; %hiddennum 隱含層節(jié)點(diǎn)數(shù)
outputnum = 3; %outputnum 隱含層節(jié)點(diǎn)數(shù)
net = newff( minmax(input) , [hiddennum outputnum] , { 'logsig' 'purelin' } , 'traingdx' ) ;
%設(shè)置訓(xùn)練參數(shù)
net.trainparam.show = 50 ;
net.trainparam.epochs = 200 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;
3.2 人工蜂鳥(niǎo)算法應(yīng)用
人工蜂鳥(niǎo)算法原理請(qǐng)參考:https://blog.csdn.net/u011835903/article/details/128386612
人工蜂鳥(niǎo)算法的參數(shù)設(shè)置為:
popsize = 10;%種群數(shù)量Max_iteration = 15;%最大迭代次數(shù)
lb = -5;%權(quán)值閾值下邊界
ub = 5;%權(quán)值閾值上邊界
% inputnum * hiddennum + hiddennum*outputnum 為閾值的個(gè)數(shù)
% hiddennum + outputnum 為權(quán)值的個(gè)數(shù)
dim = inputnum * hiddennum + hiddennum*outputnum + hiddennum + outputnum ;% inputnum * hiddennum + hiddennum*outputnum維度
這里需要注意的是,神經(jīng)網(wǎng)絡(luò)的閾值數(shù)量計(jì)算方式如下:
本網(wǎng)絡(luò)有2層:
第一層的閾值數(shù)量為:4*10 = 40; 即inputnum * hiddennum;
第一層的權(quán)值數(shù)量為:10;即hiddennum;
第二層的閾值數(shù)量為:3*10 = 30;即hiddenum * outputnum;
第二層權(quán)值數(shù)量為:3;即outputnum;
于是可知我們優(yōu)化的維度為:inputnum * hiddennum + hiddennum*outputnum + hiddennum + outputnum = 83;
適應(yīng)度函數(shù)值設(shè)定:
本文設(shè)置適應(yīng)度函數(shù)如下:
f i t n e s s = a r g m i n ( T r a i n D a t a E r r o r R a t e + T e s t D a t a E r r o r R a t e ) fitness = argmin(TrainDataErrorRate + TestDataErrorRate) fitness=argmin(TrainDataErrorRate+TestDataErrorRate)
其中TrainDataErrorRate,TestDataErrorRate分別為訓(xùn)練集和測(cè)試集的錯(cuò)誤分類(lèi)率。適應(yīng)度函數(shù)表明我們最終想得到的網(wǎng)絡(luò)是在測(cè)試集和訓(xùn)練集上均可以得到較好結(jié)果的網(wǎng)絡(luò)。
4.測(cè)試結(jié)果:
從人工蜂鳥(niǎo)算法的收斂曲線可以看到,整體誤差是不斷下降的,說(shuō)明人工蜂鳥(niǎo)算法起到了優(yōu)化的作用: