宜春代做網(wǎng)站自己做一個網(wǎng)站要多少錢
基于禿鷹優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)(分類應(yīng)用) - 附代碼
文章目錄
- 基于禿鷹優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)(分類應(yīng)用) - 附代碼
- 1.鳶尾花iris數(shù)據(jù)介紹
- 2.數(shù)據(jù)集整理
- 3.禿鷹優(yōu)化BP神經(jīng)網(wǎng)絡(luò)
- 3.1 BP神經(jīng)網(wǎng)絡(luò)參數(shù)設(shè)置
- 3.2 禿鷹算法應(yīng)用
- 4.測試結(jié)果:
- 5.Matlab代碼
摘要:本文主要介紹如何用禿鷹算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò),利用鳶尾花數(shù)據(jù),做一個簡單的講解。
1.鳶尾花iris數(shù)據(jù)介紹
本案例利用matlab公用的iris鳶尾花數(shù)據(jù),作為測試數(shù)據(jù),iris數(shù)據(jù)是特征為4維,類別為3個類別。數(shù)據(jù)格式如下:
特征1 | 特征2 | 特征3 | 類別 | |
---|---|---|---|---|
單組iris數(shù)據(jù) | 5.3 | 2.1 | 1.2 | 1 |
3種類別用1,2,3表示。
2.數(shù)據(jù)集整理
iris數(shù)據(jù)總共包含150組數(shù)據(jù),將其分為訓(xùn)練集105組,測試集45組。如下表所示:
訓(xùn)練集(組) | 測試集(組) | 總數(shù)據(jù)(組) |
---|---|---|
105 | 45 | 150 |
類別數(shù)據(jù)處理:原始數(shù)據(jù)類別用1,2,3表示為了方便神經(jīng)網(wǎng)絡(luò)訓(xùn)練,類別1,2,3分別用1,0,0;0,1,0;0,0,1表示。
當(dāng)進(jìn)行數(shù)據(jù)訓(xùn)練對所有輸入特征數(shù)據(jù)均進(jìn)行歸一化處理。
3.禿鷹優(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)值和閾值來改善BP神經(jīng)網(wǎng)絡(luò)的性能。本案例基于iris數(shù)據(jù),由于iris數(shù)據(jù)維度不高,采用簡單的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 禿鷹算法應(yīng)用
禿鷹算法原理請參考:https://blog.csdn.net/u011835903/article/details/113775430
禿鷹算法的參數(shù)設(shè)置為:
popsize = 10;%種群數(shù)量Max_iteration = 15;%最大迭代次數(shù)
lb = -5;%權(quán)值閾值下邊界
ub = 5;%權(quán)值閾值上邊界
% inputnum * hiddennum + hiddennum*outputnum 為閾值的個數(shù)
% hiddennum + outputnum 為權(quán)值的個數(shù)
dim = inputnum * hiddennum + hiddennum*outputnum + hiddennum + outputnum ;% inputnum * hiddennum + hiddennum*outputnum維度
這里需要注意的是,神經(jīng)網(wǎng)絡(luò)的閾值數(shù)量計算方式如下:
本網(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)練集和測試集的錯誤分類率。適應(yīng)度函數(shù)表明我們最終想得到的網(wǎng)絡(luò)是在測試集和訓(xùn)練集上均可以得到較好結(jié)果的網(wǎng)絡(luò)。
4.測試結(jié)果:
從禿鷹算法的收斂曲線可以看到,整體誤差是不斷下降的,說明禿鷹算法起到了優(yōu)化的作用: