【預(yù)測(cè)模型】基于狼群算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)預(yù)測(cè)matlab源碼
?
一、簡介
BP神經(jīng)網(wǎng)絡(luò)具有很好的擬合非線性函數(shù)的能力,但傳統(tǒng)BP算法收斂慢,容易陷入局部極小值.不少研究人員從BP神經(jīng)網(wǎng)絡(luò)的初始權(quán)值和閾值著手,期望通過對(duì)初始權(quán)值和閾值的優(yōu)化來提高BP神經(jīng)網(wǎng)絡(luò)的性能.對(duì)此提出一種改進(jìn)BP神經(jīng)網(wǎng)絡(luò)的算法,使用狼群算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的初始權(quán)值和閾值,用數(shù)據(jù)訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)后預(yù)測(cè)函數(shù)的輸出.最后通過一個(gè)非線性函數(shù)來驗(yàn)證所提出模型的有效性.
二、源代碼
```matlab
%% WPA-BP神經(jīng)網(wǎng)絡(luò)
%% 清空環(huán)境
clear all;
close all;
clc;
data=xlsread('Test.xlsx','Sheet1','A2:G46');%讀取數(shù)據(jù)
[M,NN]=size(data);%M是樣本數(shù),N是變量數(shù)
inputn=data(:,1:NN-1)';%訓(xùn)練樣本輸入
outputn=data(:,NN)';%訓(xùn)練樣本輸出
%節(jié)點(diǎn)個(gè)數(shù)
inputnum=NN-1;%輸入個(gè)數(shù)
hiddennum=12;%隱藏層
outputnum=1;%輸出個(gè)數(shù)
%構(gòu)建網(wǎng)絡(luò)
net=newff(inputn,outputn,hiddennum);
%% 狼群算法參數(shù)設(shè)置
tic
time = toc;
disp(['用時(shí)=? ',num2str(time)])
x=zbest;
%% 把最優(yōu)初始閥值權(quán)值賦予網(wǎng)絡(luò)預(yù)測(cè)
%% BP網(wǎng)絡(luò)訓(xùn)練
%網(wǎng)絡(luò)進(jìn)化參數(shù)
net.trainParam.epochs=100;%bp神經(jīng)網(wǎng)絡(luò)的代數(shù)
net.trainParam.lr=0.1;
%net.trainParam.goal=0.00001;
%網(wǎng)絡(luò)訓(xùn)練
[net,per2]=train(net,inputn,outputn);
%% BP網(wǎng)絡(luò)預(yù)測(cè)
% load data inputn_test output_test
inputn_test=inputn;%測(cè)試數(shù)據(jù)輸入
output_test=outputn;%測(cè)試數(shù)據(jù)輸出
an=sim(net,inputn_test);%預(yù)測(cè)
error=(an-output_test);%誤差
error_xiangdui=(an-output_test)./output_test;%相對(duì)誤差
figure(1)
plot(error_xiangdui,'ko-')
ylabel('相對(duì)誤差值')
title('狼群優(yōu)化BP神經(jīng)網(wǎng)絡(luò)')
figure(2)
plot(error,'ro-')
ylabel('誤差值')
title('狼群優(yōu)化BP神經(jīng)網(wǎng)絡(luò)')
figure(3)
plot(output_test,'r + -');
hold on;
plot(an,'b * -')
hold off
legend('真實(shí)值','預(yù)測(cè)值');
title('狼群優(yōu)化BP神經(jīng)網(wǎng)絡(luò)')
三、運(yùn)行結(jié)果
四、參考文獻(xiàn)
[1]李常洪, and 趙偉棟. "基于狼群算法優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)." 科技創(chuàng)新與生產(chǎn)力 000.001(2016):56-58.