資源簡介
遺傳算法優(yōu)化bp神經(jīng)網(wǎng)絡(luò).zip

代碼片段和文件信息
%%?此程序為BP神經(jīng)網(wǎng)絡(luò)和基于遺傳算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)預(yù)測效果對比
%?清空環(huán)境變量
clearclose?all
clc
warning?off
%%?讀取數(shù)據(jù)
data=xlsread(‘?dāng)?shù)據(jù).xlsx‘);
input=data(:1:end-1);
output=data(:end);
%%?設(shè)置訓(xùn)練數(shù)據(jù)和預(yù)測數(shù)據(jù)
L=length(output);??%總樣本個數(shù)
num=150;?????????%設(shè)置訓(xùn)練樣本個數(shù)
input_train?=?input(1:num:)‘;
output_train?=?output(1:num:)‘;
input_test?=?input(num+1:end:)‘;
output_test?=?output(num+1:end:)‘;
disp([‘訓(xùn)練樣本數(shù)‘num2str(num)])
disp([‘測試樣本數(shù)‘num2str(L-num)])
%%?數(shù)據(jù)歸一化
[inputninputps]=mapminmax(input_train);%歸一化到[-11]之間,inputps用來作下一次同樣的歸一化
[outputnoutputps]=mapminmax(output_train);
inputn_test=mapminmax(‘a(chǎn)pply‘input_testinputps);%?對測試樣本數(shù)據(jù)進(jìn)行歸一化
%%?節(jié)點個數(shù)
inputnum=size(input_train1);???????%輸入層節(jié)點個數(shù)
outputnum=size(output_train1);??????%輸出層節(jié)點個數(shù)
hiddennum=10;
%%?構(gòu)建BP神經(jīng)網(wǎng)絡(luò)
disp(‘?‘)
disp(‘標(biāo)準(zhǔn)的BP神經(jīng)網(wǎng)絡(luò):‘)
net0=newff(inputnoutputnhiddennum{‘tansig‘‘purelin‘}‘trainlm‘‘learngdm‘);%?建立模型
%網(wǎng)絡(luò)參數(shù)配置
net0.trainParam.epochs=1000;?????????%?訓(xùn)練次數(shù),這里設(shè)置為1000次
net0.trainParam.lr=0.01;???????????????????%?學(xué)習(xí)速率,這里設(shè)置為0.01
net0.trainParam.goal=0.00001;????????????????????%?訓(xùn)練目標(biāo)最小誤差,這里設(shè)置為0.0001
net0.trainParam.show=25;????????????????%?顯示頻率,這里設(shè)置為每訓(xùn)練25次顯示一次
net0.trainParam.mc=0.01;?????????????????%?動量因子
net0.trainParam.min_grad=1e-6;???????%?最小性能梯度
net0.trainParam.max_fail=6;???????????????%?最高失敗次數(shù)
%開始訓(xùn)練
[net0tr0]=train(net0inputnoutputn);
figure
plotperform(tr0)???%訓(xùn)練集的誤差曲線
%預(yù)測
an0=sim(net0inputn_test);?%用訓(xùn)練好的模型進(jìn)行仿真
%預(yù)測結(jié)果反歸一化與誤差計算
test_simu0=mapminmax(‘reverse‘a(chǎn)n0outputps);?%把仿真得到的數(shù)據(jù)還原為原始的數(shù)量級
%誤差指標(biāo)
[mae0mse0rmse0mape0error0errorPercent0]=calc_error(output_testtest_simu0);
%%?遺傳算法尋最優(yōu)權(quán)值閾值
disp(‘?‘)
disp(‘GA優(yōu)化BP神經(jīng)網(wǎng)絡(luò):‘)
net=newff(inputnoutputnhiddennum{‘tansig‘‘purelin‘}‘trainlm‘‘learngdm‘);%?建立模型
%網(wǎng)絡(luò)參數(shù)配置
net.trainParam.epochs=1000;?????????%?訓(xùn)練次數(shù),這里設(shè)置為1000次
net.trainParam.lr=0.01;???????????????????%?學(xué)習(xí)速率,這里設(shè)置為0.01
net.trainParam.goal=0.00001;????????????????????%?訓(xùn)練目標(biāo)最小誤差,這里設(shè)置為0.0001
net.trainParam.show=25;????????????????%?顯示頻率,這里設(shè)置為每訓(xùn)練25次顯示一次
net.trainParam.mc=0.01;?????????????????%?動量因子
net.trainParam.min_grad=1e-6;???????%?最小性能梯度
net.trainParam.max_fail=6;???????????????%?最高失敗次數(shù)
save?data?inputnum?hiddennum?outputnum?net?inputn?outputn??inputn_test?outputps?output_test
%初始化ga參數(shù)
PopulationSize_Data=10;???%初始種群規(guī)模
MaxGenerations_Data=30;???%最大進(jìn)化代數(shù)
CrossoverFraction_Data=0.8;??%交叉概率
MigrationFraction_Data=0.2;???%變異概率
nvars=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;????%自變量個數(shù)
lb=repmat(-3nvars1);????%自變量下限
ub=repmat(3nvars1);???%自變量上限
%調(diào)用遺傳算法函數(shù)
options?=?optimoptions(‘ga‘);
options?=?optimoptions(options‘PopulationSize‘?PopulationSize_Data);
options?=?optimoptions(options‘CrossoverFraction‘?CrossoverFraction_Data);
options?=?optimoptions(options‘MigrationFraction‘?MigrationFraction_Data);
options?=?optimoptions(options‘MaxGenerations‘?MaxGenerations_Data);
options?=?optimoptions(options‘SelectionFcn‘?@selectionroulette);???%輪盤賭選擇
options?=?optimoptions(options
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????564??2020-09-02?01:32??遺傳算法優(yōu)化bp神經(jīng)網(wǎng)絡(luò)\calc_error.p
?????文件?????????402??2020-09-02?01:32??遺傳算法優(yōu)化bp神經(jīng)網(wǎng)絡(luò)\fitness.p
?????文件????????5367??2020-09-02?01:29??遺傳算法優(yōu)化bp神經(jīng)網(wǎng)絡(luò)\main.m
?????文件???????17448??2020-09-02?01:28??遺傳算法優(yōu)化bp神經(jīng)網(wǎng)絡(luò)\數(shù)據(jù).xlsx
- 上一篇:正則表達(dá)式中re.1.png
- 下一篇:Elsevier 的word模板
評論
共有 條評論