【BP預(yù)測】基于帝國企鵝算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)數(shù)據(jù)預(yù)測附matlab代碼
1 簡介
BP神經(jīng)網(wǎng)絡(luò)算法使用非常廣泛,傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)算法雖然具有不錯(cuò)的擬合非線性函數(shù)的能力,但是容易陷入局部的極小值,并且傳統(tǒng)的算法收斂的速度慢.本篇文章詳細(xì)地論述了如何使用帝企鵝算法優(yōu)化傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)算法中初始的權(quán)值和閥值,通過相應(yīng)的驗(yàn)證和比較提出了該模型的有效性.



2 部分代碼
%% 2021.9.2 ?AFO 算法優(yōu)化神經(jīng)網(wǎng)絡(luò)
% 2021.9.2 AFO algorithm optimizes neural network weights and thresholds
%% 這是使用原始算法的直接求解結(jié)果,添加專用于本問題的更新方式可以進(jìn)一步提高精度
% This is the direct result of using the original algorithm,
% adding some specific update methods to this problem can further improve the accuracy
clc;
clear;
close all;
warning off
%% 固定隨機(jī)數(shù)種子
noRNG=1;
rng('default')
rng(noRNG)
%% 載入數(shù)據(jù)
%% 數(shù)據(jù)預(yù)處理
load input
load output
%%
data.x=[input'];
data.y=[output];
num_Train=120; %訓(xùn)練集數(shù)量
data.len_train=num_Train;
num_Test=48; %測試集數(shù)量
index=randperm(num_Train+num_Test); %隨機(jī)亂序
data.train_x=data.x(:,index(1:num_Train))';
data.train_y=data.y(:,index(1:num_Train))';
data.test_x=data.x(:,index(num_Train+1:end))';
data.test_y=data.y(:,index(num_Train+1:end))';
% 歸一化
[data.train_x0,option.ps_x]=mapminmax(data.train_x');
data.train_x0=data.train_x0';
[data.train_y0,option.ps_y]=mapminmax(data.train_y');
data.train_y0=data.train_y0';
data.test_x0 = mapminmax('apply',data.test_x',option.ps_x);
data.test_x0=data.test_x0';
data.test_y0 = mapminmax('apply',data.test_y',option.ps_y);
data.test_y0=data.test_y0';
%%
data.weight=1;
data=data;
data.hiddenumber= [5];%隱含神經(jīng)元數(shù)
%% 未優(yōu)化神經(jīng)網(wǎng)絡(luò)
clear result
[x(1,:),result(1)]=creat_x_1(option,data);
%draw(result(1),'未優(yōu)化')
data.m=result(1).m;
data.n=result(1).n;
data.m_lw=result(1).m_lw;
data.n_lw=result(1).n_lw;
data.m_iw=result(1).m_iw;
data.n_iw=result(1).n_iw;
data.m_b=result(1).m_b;
data.n_b=result(1).n_b;
data.len=result(1).len;
[y(1),result(1)]=aimFcn_1(x(1,:),option,data,result(1).net);
%% 參數(shù)設(shè)置
lb=-5;
ub=5;
option.lb=lb;
option.ub=ub;
dim=length(x(1,:));
%%
option.dim=dim; %八個(gè)決策變量
lb=0;
ub=1;
option.lb=lb;
option.ub=ub;
if length(option.lb)==1
? ?option.lb=ones(1,option.dim)*option.lb;
? ?option.ub=ones(1,option.dim)*option.ub;
end
option.fobj=@aimFcn_1;
%option.fobj0=option.fobj;
option.showIter=0;
%% 算法參數(shù)設(shè)置 Parameters
% 基本參數(shù)
tic
[bestY(1,:),bestX(1,:),best_result1,recording(1)]=AFO1(x,y,result,option,data);
tt(1,1)=toc;
%%
figure
hold on
for i=1:length(recording)
? ?plot((recording(i).bestFit),'LineWidth',2)
end
legend(str_legend)
title('fitness curve')
%% 未優(yōu)化神經(jīng)網(wǎng)絡(luò)
rng(7)
[x(1,:),result(1)]=creat_x_1(option,data);
[y(1),result(1)]=aimFcn_1(x(1,:),option,data,result(1).net);
%%
figure
hold on
plot(result(1).ygabptest(i,:));
plot(best_result1.ygabptest(i,:));
plot(data.test_y(:,i));
legend(['未優(yōu)化神經(jīng)網(wǎng)絡(luò)(mse=',num2str(result(1).mse(i)),')'],['AFO優(yōu)化神經(jīng)網(wǎng)絡(luò)(mse=',num2str(best_result1.mse(i)),')'],['真實(shí)數(shù)據(jù)'])
3 仿真結(jié)果


4 參考文獻(xiàn)
[1]肖雄. PSO優(yōu)化BP神經(jīng)網(wǎng)絡(luò)巖爆預(yù)測的Matlab實(shí)現(xiàn)[J]. 中國房地產(chǎn)業(yè), 2018, 000(025):244.
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
