【BP預測】基於Logistic混沌映射改進的原子搜索算法優化BP神經網絡實現數據預測matlab源碼

1、 BP神經網絡預測算法簡介

說明:1.1節主要是歸納和幫助理解考慮影響因素的BP神經網絡算法原理,即常規的BP模型訓練原理講解(可根據自身掌握的知識是否跳過)。1.2節開始講基於歷史值影響的BP神經網絡預測模型。算法

使用BP神經網絡進行預測時,從考慮的輸入指標角度,主要有兩類模型:網絡

1.1 受相關指標影響的BP神經網絡算法原理

如圖一所示,使用MATLAB的newff函數訓練BP時,能夠看到大部分狀況是三層的神經網絡(即輸入層,隱含層,輸出層)。這裏幫助理解下神經網絡原理:
1)輸入層:至關於人的五官,五官獲取外部信息,對應神經網絡模型input端口接收輸入數據的過程。
2)隱含層:對應人的大腦,大腦對五官傳遞來的數據進行分析和思考,神經網絡的隱含層hidden Layer對輸入層傳來的數據x進行映射,簡單理解爲一個公式hiddenLayer_output=F(w*x+b)。其中,w、b叫作權重、閾值參數,F()爲映射規則,也叫激活函數,hiddenLayer_output是隱含層對於傳來的數據映射的輸出值。換句話說,隱含層對於輸入的影響因素數據x進行了映射,產生了映射值。
3)輸出層:能夠對應爲人的四肢,大腦對五官傳來的信息通過思考(隱含層映射)以後,再控制四肢執行動做(向外部做出響應)。相似地,BP神經網絡的輸出層對hiddenLayer_output再次進行映射,outputLayer_output=w *hiddenLayer_output+b。其中,w、b爲權重、閾值參數,outputLayer_output是神經網絡輸出層的輸出值(也叫仿真值、預測值)(理解爲,人腦對外的執行動做,好比嬰兒拍打桌子)。
4)梯度降低算法:經過計算outputLayer_output和神經網絡模型傳入的y值之間的誤差,使用算法來相應調整權重和閾值等參數。這個過程,能夠理解爲嬰兒拍打桌子,打偏了,根據偏離的距離遠近,來調整身體使得再次揮動的胳膊不斷靠近桌子,最終打中。
dom

再舉個例子來加深理解:函數

圖一所示BP神經網絡,具有輸入層、隱含層和輸出層。BP是如何經過這三層結構來實現輸出層的輸出值outputLayer_output,不斷逼近給定的y值,從而訓練獲得一個精準的模型的呢?測試

從圖中串起來的端口,能夠想到一個過程:坐地鐵,將圖一想象爲一條地鐵線路。王某某坐地鐵回家的一天:在input起點站上車,中途通過了不少站(hiddenLayer),而後發現坐過頭了(outputLayer對應如今的位置),那麼王某某將會根據如今的位置離家(目標Target)的距離(偏差Error),返回到中途的地鐵站(hiddenLayer)從新坐地鐵(偏差反向傳遞,使用梯度降低算法更新w和b),若是王某某又一次發生失誤,那麼將再次進行這個調整的過程。優化

從在嬰兒拍打桌子和王某某坐地鐵的例子中,思考問題:BP的完整訓練,須要先傳入數據給input,再通過隱含層的映射,輸出層獲得BP仿真值,根據仿真值與目標值的偏差,來調整參數,使得仿真值不斷逼近目標值。好比(1)嬰兒受到了外界的干擾因素(x),從而做出反應拍桌(predict),大腦不斷的調整胳膊位置,控制四肢拍準(y、Target)。(2)王某某上車點(x),過站點(predict),不斷返回中途站來調整位置,到家(y、Target)。atom

在這些環節中,涉及了影響因素數據x,目標值數據y(Target)。根據x,y,使用BP算法來尋求x與y之間存在的規律,實現由x來映射逼近y,這就是BP神經網絡算法的做用。再多說一句,上述講的過程,都是BP模型訓練,那麼最終獲得的模型雖然訓練準確,可是找到的規律(bp network)是否準確與可靠呢。因而,咱們再給x1到訓練好的bp network中,獲得相應的BP輸出值(預測值)predict1,經過做圖,計算Mse,Mape,R方等指標,來對比predict1和y1的接近程度,就能夠知道模型是否預測準確。這是BP模型的測試過程,即實現對數據的預測,而且對比實際值檢驗預測是否準確。
在這裏插入圖片描述
圖一 3層BP神經網絡結構圖lua

1.2 基於歷史值影響的BP神經網絡

以電力負荷預測問題爲例,進行兩種模型的區分。在預測某個時間段內的電力負荷時:spa

一種作法,是考慮 t 時刻的氣候因素指標,好比該時刻的空氣溼度x1,溫度x2,以及節假日x3等的影響,對 t 時刻的負荷值進行預測。這是前面1.1所說的模型。blog

另外一種作法,是認爲電力負荷值的變化,與時間相關,好比認爲t-1,t-2,t-3時刻的電力負荷值與t時刻的負荷值有關係,即知足公式y(t)=F(y(t-1),y(t-2),y(t-3))。採用BP神經網絡進行訓練模型時,則輸入到神經網絡的影響因素值爲歷史負荷值y(t-1),y(t-2),y(t-3),特別地,3叫作自迴歸階數或者延遲。給到神經網絡中的目標輸出值爲y(t)。

2、原子搜索算法

原子搜索優化算法(Atom Search Optimization)是於2019提出的一種基於分子動力學模型的新穎智能算法.模擬在原子構成的分子系統中,原子因相互間的做用力和系統約束力而產生位移的現象.在一個分子系統中,相鄰的原子間存在相互做用力(吸引力和排斥力),且全局最優原子對其餘原子存在幾何約束做用 .引力促使原子普遍地探索整個搜索空間,斥力使它們可以有效地開發潛在區域 。具備尋優能力強,收斂快的特色。
1.原子優化算法原理

在這裏插入圖片描述

在這裏插入圖片描述

 

3、ASO優化BP神經網絡的步驟

Step1:初始化BP神經網絡的權值和閾值
Step2:計Logistic混沌映射改進的原子搜索優化算法的決策變量長度,選取均方偏差做爲優化的目標函數。
Step3:設置算法中止準則,使用遺傳優化算法優化神經網絡的權值和閾值參數。
Step4:將優化獲得的權值和閾值參數賦給BP神經網絡。
Step5:優化後的BP神經網絡訓練與測試,與優化前的BP神經網絡進行偏差分析和精度對比。

3、演示代碼

%--------------------------------------------------------------------------
% Atom Search Optimization.
function [X_Best,Fit_XBest,Functon_Best]=ASO(alpha,beta,Fun_Index,Atom_Num,Max_Iteration)

% Dim: Dimension of search space.
% Atom_Pop: Population (position) of atoms.
% Atom_V:  Velocity of atoms.
% Acc: Acceleration of atoms.
% M: Mass of atoms. 
% Atom_Num: Number of atom population.
% Fitness: Fitness of atoms.
% Max_Iteration: Maximum of iterations.
% X_Best: Best solution (position) found so far. 
% Fit_XBest: Best result corresponding to X_Best. 
% Functon_Best: The fitness over iterations. 
% Low: The low bound of search space.
% Up: The up bound of search space.
% alpha: Depth weight.
% beta: Multiplier weight

alpha=50;
beta=0.2;


   Iteration=1;
   [Low,Up,Dim]=Test_Functions_Range(Fun_Index); 
 
   % Randomly initialize positions and velocities of atoms.
     if size(Up,2)==1
         Atom_Pop=rand(Atom_Num,Dim).*(Up-Low)+Low;
         Atom_V=rand(Atom_Num,Dim).*(Up-Low)+Low;
     end
   
     if size(Up,2)>1
        for i=1:Dim
           Atom_Pop(:,i)=rand(Atom_Num,1).*(Up(i)-Low(i))+Low(i);
           Atom_V(:,i)=rand(Atom_Num,1).*(Up(i)-Low(i))+Low(i);
        end
     end

 % Compute function fitness of atoms.
     for i=1:Atom_Num
       Fitness(i)=Test_Functions(Atom_Pop(i,:),Fun_Index,Dim);
     end
       Functon_Best=zeros(Max_Iteration,1);
       [Max_Fitness,Index]=min(Fitness);
       Functon_Best(1)=Fitness(Index);
       X_Best=Atom_Pop(Index,:);
     
 % Calculate acceleration.
 Atom_Acc=Acceleration(Atom_Pop,Fitness,Iteration,Max_Iteration,Dim,Atom_Num,X_Best,alpha,beta);


 % Iteration
 for Iteration=2:Max_Iteration 
           Functon_Best(Iteration)=Functon_Best(Iteration-1);
           Atom_V=rand(Atom_Num,Dim).*Atom_V+Atom_Acc;
           Atom_Pop=Atom_Pop+Atom_V;     
    
    
         for i=1:Atom_Num
       % Relocate atom out of range.  
           TU= Atom_Pop(i,:)>Up;
           TL= Atom_Pop(i,:)<Low;
           Atom_Pop(i,:)=(Atom_Pop(i,:).*(~(TU+TL)))+((rand(1,Dim).*(Up-Low)+Low).*(TU+TL));
           %evaluate atom. 
           Fitness(i)=Test_Functions(Atom_Pop(i,:),Fun_Index,Dim);
         end
        [Max_Fitness,Index]=min(Fitness);      
     
        if Max_Fitness<Functon_Best(Iteration)
             Functon_Best(Iteration)=Max_Fitness;
             X_Best=Atom_Pop(Index,:);
          else
            r=fix(rand*Atom_Num)+1;
             Atom_Pop(r,:)=X_Best;
        end
     
      % Calculate acceleration.
       Atom_Acc=Acceleration(Atom_Pop,Fitness,Iteration,Max_Iteration,Dim,Atom_Num,X_Best,alpha,beta);
 end

Fit_XBest=Functon_Best(Iteration); 

4、仿真結果

 

 

5、參考文獻及代碼私信博主

《基於BP神經網絡的寧夏水資源需求量預測》

 

 

 

 

相關文章
相關標籤/搜索