基于粒子群优化算法的BP神经网络预测模型(Matlab代码实现)
?
目錄
1 概述
2 粒子群優(yōu)化算法
3 BP神經(jīng)網(wǎng)絡(luò)
4?PSO優(yōu)化 BP網(wǎng)絡(luò)算法
5 運(yùn)行結(jié)果
6 參考文獻(xiàn)?
7 Matlab代碼實(shí)現(xiàn)
1 概述
在工程應(yīng)用中經(jīng)常會(huì)遇到一些復(fù)雜的非線性系統(tǒng),這些系統(tǒng)的狀態(tài)方程復(fù)雜,難以準(zhǔn)確的用數(shù)學(xué)方法建模,而BP神經(jīng)網(wǎng)絡(luò)實(shí)質(zhì)上實(shí)現(xiàn)了一個(gè)從輸入到輸出的映射功能,數(shù)學(xué)理論證明三層的神經(jīng)網(wǎng)絡(luò)就能夠以任意精度逼近任何非線性連續(xù)函數(shù),具有非常強(qiáng)的非線性映射能力,使得其特別適合于求解內(nèi)部機(jī)制復(fù)雜的問題.該方法是把未知系統(tǒng)看成是一個(gè)黑箱,首先用系統(tǒng)輸入輸出數(shù)據(jù)訓(xùn)練BP網(wǎng)絡(luò),使得網(wǎng)絡(luò)能夠表達(dá)該未知非線性函數(shù),然后用訓(xùn)練好的網(wǎng)絡(luò)預(yù)測(cè)系統(tǒng)輸出".但是傳統(tǒng)的BP網(wǎng)絡(luò)算法具有收斂速度慢、容易陷入局部極值和誤差比較大等缺點(diǎn),因此優(yōu)化這種網(wǎng)絡(luò)成了必要.粒子群優(yōu)化算法作為一種智能算法,是一種仿生算法和隨機(jī)搜索算法,參數(shù)少,尋優(yōu)能力較好,將其和BP網(wǎng)絡(luò)結(jié)合起來,優(yōu)化BP網(wǎng)絡(luò)的權(quán)值和閾值,彌補(bǔ)了BP網(wǎng)絡(luò)的一些缺點(diǎn),提高了BP網(wǎng)絡(luò)擬合函數(shù)的能力.
2 粒子群優(yōu)化算法
粒子群優(yōu)化算法是一種群體智能的優(yōu)化算法,它是源于對(duì)鳥類捕食行為的研究,鳥類捕食時(shí),每只鳥找到食物最簡(jiǎn)單最有效的方法就是搜尋當(dāng)前距離食物最近的鳥的周圍區(qū)域. PSO算法是從這種生物種群行為特征中得到啟發(fā)并求解優(yōu)化問題的.算法中每個(gè)粒子都代表問題的一個(gè)潛在解,每個(gè)粒子對(duì)應(yīng)一個(gè)由適應(yīng)度函數(shù)決定的適應(yīng)度值,粒子的速度決定了其移動(dòng)的方向和距離,速度隨自身及其他粒子的移動(dòng)經(jīng)驗(yàn)進(jìn)行動(dòng)態(tài)調(diào)整,從而實(shí)現(xiàn)個(gè)體在可解空間中的尋優(yōu).
| 粒子群算法(帶約束處理)——Python&Matlab實(shí)現(xiàn) |
3 BP神經(jīng)網(wǎng)絡(luò)
BP神經(jīng)網(wǎng)絡(luò)是一種多層前饋神經(jīng)網(wǎng)絡(luò),拓?fù)浣Y(jié)構(gòu)包括:輸入層、隱層、輸出層,它的主要特點(diǎn)是信號(hào)前向傳遞,誤差反向傳播.在前向傳遞中,輸人信號(hào)從輸人層經(jīng)隱含層逐層處理,直至輸出層,每--層的神經(jīng)元狀態(tài)只影響下一層神經(jīng)元狀態(tài).如果輸出層得不到期望輸出,則轉(zhuǎn)入反向傳播,根據(jù)預(yù)測(cè)誤差調(diào)整網(wǎng)絡(luò)權(quán)值和閾值,從而使網(wǎng)絡(luò)預(yù)測(cè)輸出不斷逼近期望輸出. BP網(wǎng)絡(luò)訓(xùn)練的步驟如下:
4?PSO優(yōu)化 BP網(wǎng)絡(luò)算法
BP網(wǎng)絡(luò)的非線性泛化能力很強(qiáng),但是其收斂速度慢,容易陷人局部極值,誤差比較大,為了彌補(bǔ)BP網(wǎng)絡(luò)的這種缺點(diǎn),將PSO算法與BP網(wǎng)絡(luò)結(jié)合,用PSO算法優(yōu)化BP網(wǎng)絡(luò)的權(quán)值和閾值,提高了網(wǎng)絡(luò)的非線性擬合能力. PSO-BP算法如下:
(1)初始化網(wǎng)絡(luò)的訓(xùn)練樣本數(shù)m,測(cè)試樣本數(shù)n ,隱層節(jié)點(diǎn)數(shù)hidden _.num,粒子群數(shù)目particle_num,迭代次數(shù)epoch ,慣性權(quán)重w ,加速度因子c,C2.
(2)根據(jù)目標(biāo)函數(shù)獲得訓(xùn)練樣本和測(cè)試樣本的輸人和理想輸出,并畫出理想曲線和測(cè)試樣本點(diǎn).(3)隨機(jī)初始化粒子群的位置和速度,并計(jì)算各粒子的適應(yīng)度值.
(4)根據(jù)上述公式更新各個(gè)粒子的位置和速度,并記錄每個(gè)粒子的最佳位置.(5)記錄全局最優(yōu)位置.
(6)計(jì)算測(cè)試樣本的輸出,并畫出預(yù)測(cè)曲線及誤差曲線.
部分代碼:
%% 清空環(huán)境變量 tic clc clear close all format compact %% 導(dǎo)入數(shù)據(jù) load data1 input=In'; output=U3; %% % 隨機(jī)生成訓(xùn)練集、測(cè)試集 rand('seed',0)k = randperm(size(input,1)); m=7100; P_train=input(k(1:m),:)'; T_train=output(k(1:m));P_test=input(k(m+1:end),:)'; T_test=output(k(m+1:end));%% 歸一化 % 訓(xùn)練集 [Pn_train,inputps] = mapminmax(P_train,-1,1); Pn_test = mapminmax('apply',P_test,inputps); % 測(cè)試集 [Tn_train,outputps] = mapminmax(T_train,-1,1); Tn_test = mapminmax('apply',T_test,outputps);%% 節(jié)點(diǎn)個(gè)數(shù) inputnum=size(Pn_train,1); hiddennum=5; outputnum=1; %% 沒有優(yōu)化的bp net=newff(Pn_train,Tn_train,hiddennum); net.trainParam.epochs=200; net.trainParam.lr=0.1; net.trainParam.goal=0.00000001; net.trainParam.max_fail = 200;%網(wǎng)絡(luò)訓(xùn)練 [net,per2]=train(net,Pn_train,Tn_train); an=sim(net,Pn_test); error=an-Tn_test;test_simu=mapminmax('reverse',an,outputps); disp('優(yōu)化前') E1=norm(error); E2=mse(error) MAPE=mean(abs(error)./Tn_test);figure plot(test_simu) hold on plot(T_test) legend('實(shí)際輸出','期望輸出')%% 粒子群優(yōu)化bp% [bestchrom,trace]=psoforbp(inputnum,hiddennum,outputnum,Pn_train,Tn_train);%粒子群算法 % x=bestchrom; % save result x load result%直接調(diào)用訓(xùn)練好的 % 用pso優(yōu)化的BP網(wǎng)絡(luò)進(jìn)行值預(yù)測(cè) w1=x(1:inputnum*hiddennum); B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum); w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum); B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);net.iw{1,1}=reshape(w1,hiddennum,inputnum); net.lw{2,1}=reshape(w2,outputnum,hiddennum); net.b{1}=reshape(B1,hiddennum,1); net.b{2}=B2';%% BP網(wǎng)絡(luò)訓(xùn)練 %網(wǎng)絡(luò)進(jìn)化參數(shù) net.trainParam.epochs=200; net.trainParam.lr=0.1; net.trainParam.goal=0.00000001; net.trainParam.max_fail = 200;%網(wǎng)絡(luò)訓(xùn)練 [net,per2]=train(net,Pn_train,Tn_train);%% BP網(wǎng)絡(luò)預(yù)測(cè) %數(shù)據(jù)歸一化 an=sim(net,Pn_test); error=an-Tn_test;test_simu=mapminmax('reverse',an,outputps); disp('優(yōu)化后') E1=norm(error); E2=mse(error) MAPE=mean(abs(error)./Tn_test); toc %% figure plot(test_simu) hold on plot(T_test) legend('實(shí)際輸出','期望輸出')5 運(yùn)行結(jié)果
?
?
?
?
6 參考文獻(xiàn)?
部分理論引用網(wǎng)絡(luò)文獻(xiàn),如有侵權(quán)請(qǐng)聯(lián)系刪除。
[1]郝海霞.用粒子群算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)進(jìn)行函數(shù)擬合[J].山西師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2017,31(01):14-16.DOI:10.16207/j.cnki.1009-4490.2017.01.004.
7 Matlab代碼實(shí)現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的基于粒子群优化算法的BP神经网络预测模型(Matlab代码实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Blog小技巧之二-让朋友在Blog上也
- 下一篇: swift 第四课 随意 设置butto