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