說明:1.1節主要是歸納和幫助理解考慮影響因素的BP神經網絡算法原理,即常規的BP模型訓練原理講解(可根據自身掌握的知識是否跳過)。1.2節開始講基於歷史值影響的BP神經網絡預測模型。算法
使用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
以電力負荷預測問題爲例,進行兩種模型的區分。在預測某個時間段內的電力負荷時: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)。
原子搜索優化算法(Atom Search Optimization)是於2019提出的一種基於分子動力學模型的新穎智能算法.模擬在原子構成的分子系統中,原子因相互間的做用力和系統約束力而產生位移的現象.在一個分子系統中,相鄰的原子間存在相互做用力(吸引力和排斥力),且全局最優原子對其餘原子存在幾何約束做用 .引力促使原子普遍地探索整個搜索空間,斥力使它們可以有效地開發潛在區域 。具備尋優能力強,收斂快的特色。
1.原子優化算法原理
Step1:初始化BP神經網絡的權值和閾值
Step2:計Logistic混沌映射改進的原子搜索優化算法的決策變量長度,選取均方偏差做爲優化的目標函數。
Step3:設置算法中止準則,使用遺傳優化算法優化神經網絡的權值和閾值參數。
Step4:將優化獲得的權值和閾值參數賦給BP神經網絡。
Step5:優化後的BP神經網絡訓練與測試,與優化前的BP神經網絡進行偏差分析和精度對比。
%-------------------------------------------------------------------------- % 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);
《基於BP神經網絡的寧夏水資源需求量預測》