最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【預(yù)測(cè)模型】基于差分進(jìn)化算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)數(shù)據(jù)預(yù)測(cè)matlab源碼

2021-09-20 17:13 作者:Matlab工程師  | 我要投稿

1 算法介紹

說(shuō)明:1.1節(jié)主要是概括和幫助理解考慮影響因素的BP神經(jīng)網(wǎng)絡(luò)算法原理,即常規(guī)的BP模型訓(xùn)練原理講解(可根據(jù)自身掌握的知識(shí)是否跳過(guò))。1.2節(jié)開(kāi)始講基于歷史值影響的BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型。

使用BP神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測(cè)時(shí),從考慮的輸入指標(biāo)角度,主要有兩類(lèi)模型:



1.1 受相關(guān)指標(biāo)影響的BP神經(jīng)網(wǎng)絡(luò)算法原理

如圖一所示,使用MATLAB的newff函數(shù)訓(xùn)練BP時(shí),可以看到大部分情況是三層的神經(jīng)網(wǎng)絡(luò)(即輸入層,隱含層,輸出層)。這里幫助理解下神經(jīng)網(wǎng)絡(luò)原理:
1)輸入層:相當(dāng)于人的五官,五官獲取外部信息,對(duì)應(yīng)神經(jīng)網(wǎng)絡(luò)模型input端口接收輸入數(shù)據(jù)的過(guò)程。
2)隱含層:對(duì)應(yīng)人的大腦,大腦對(duì)五官傳遞來(lái)的數(shù)據(jù)進(jìn)行分析和思考,神經(jīng)網(wǎng)絡(luò)的隱含層hidden Layer對(duì)輸入層傳來(lái)的數(shù)據(jù)x進(jìn)行映射,簡(jiǎn)單理解為一個(gè)公式hiddenLayer_output=F(w*x+b)。其中,w、b叫做權(quán)重、閾值參數(shù),F(xiàn)()為映射規(guī)則,也叫激活函數(shù),hiddenLayer_output是隱含層對(duì)于傳來(lái)的數(shù)據(jù)映射的輸出值。換句話說(shuō),隱含層對(duì)于輸入的影響因素?cái)?shù)據(jù)x進(jìn)行了映射,產(chǎn)生了映射值。
3)輸出層:可以對(duì)應(yīng)為人的四肢,大腦對(duì)五官傳來(lái)的信息經(jīng)過(guò)思考(隱含層映射)之后,再控制四肢執(zhí)行動(dòng)作(向外部作出響應(yīng))。類(lèi)似地,BP神經(jīng)網(wǎng)絡(luò)的輸出層對(duì)hiddenLayer_output再次進(jìn)行映射,outputLayer_output=w *hiddenLayer_output+b。其中,w、b為權(quán)重、閾值參數(shù),outputLayer_output是神經(jīng)網(wǎng)絡(luò)輸出層的輸出值(也叫仿真值、預(yù)測(cè)值)(理解為,人腦對(duì)外的執(zhí)行動(dòng)作,比如嬰兒拍打桌子)。
4)梯度下降算法:通過(guò)計(jì)算outputLayer_output和神經(jīng)網(wǎng)絡(luò)模型傳入的y值之間的偏差,使用算法來(lái)相應(yīng)調(diào)整權(quán)重和閾值等參數(shù)。這個(gè)過(guò)程,可以理解為嬰兒拍打桌子,打偏了,根據(jù)偏離的距離遠(yuǎn)近,來(lái)調(diào)整身體使得再次揮動(dòng)的胳膊不斷靠近桌子,最終打中。

再舉個(gè)例子來(lái)加深理解:

圖一所示BP神經(jīng)網(wǎng)絡(luò),具備輸入層、隱含層和輸出層。BP是如何通過(guò)這三層結(jié)構(gòu)來(lái)實(shí)現(xiàn)輸出層的輸出值outputLayer_output,不斷逼近給定的y值,從而訓(xùn)練得到一個(gè)精準(zhǔn)的模型的呢?

從圖中串起來(lái)的端口,可以想到一個(gè)過(guò)程:坐地鐵,將圖一想象為一條地鐵線路。王某某坐地鐵回家的一天:在input起點(diǎn)站上車(chē),中途經(jīng)過(guò)了很多站(hiddenLayer),然后發(fā)現(xiàn)坐過(guò)頭了(outputLayer對(duì)應(yīng)現(xiàn)在的位置),那么王某某將會(huì)根據(jù)現(xiàn)在的位置離家(目標(biāo)Target)的距離(誤差Error),返回到中途的地鐵站(hiddenLayer)重新坐地鐵(誤差反向傳遞,使用梯度下降算法更新w和b),如果王某某又一次發(fā)生失誤,那么將再次進(jìn)行這個(gè)調(diào)整的過(guò)程。

從在嬰兒拍打桌子和王某某坐地鐵的例子中,思考問(wèn)題:BP的完整訓(xùn)練,需要先傳入數(shù)據(jù)給input,再經(jīng)過(guò)隱含層的映射,輸出層得到BP仿真值,根據(jù)仿真值與目標(biāo)值的誤差,來(lái)調(diào)整參數(shù),使得仿真值不斷逼近目標(biāo)值。比如(1)嬰兒受到了外界的干擾因素(x),從而作出反應(yīng)拍桌(predict),大腦不斷的調(diào)整胳膊位置,控制四肢拍準(zhǔn)(y、Target)。(2)王某某上車(chē)點(diǎn)(x),過(guò)站點(diǎn)(predict),不斷返回中途站來(lái)調(diào)整位置,到家(y、Target)。

在這些環(huán)節(jié)中,涉及了影響因素?cái)?shù)據(jù)x,目標(biāo)值數(shù)據(jù)y(Target)。根據(jù)x,y,使用BP算法來(lái)尋求x與y之間存在的規(guī)律,實(shí)現(xiàn)由x來(lái)映射逼近y,這就是BP神經(jīng)網(wǎng)絡(luò)算法的作用。再多說(shuō)一句,上述講的過(guò)程,都是BP模型訓(xùn)練,那么最終得到的模型雖然訓(xùn)練準(zhǔn)確,但是找到的規(guī)律(bp network)是否準(zhǔn)確與可靠呢。于是,我們?cè)俳ox1到訓(xùn)練好的bp network中,得到相應(yīng)的BP輸出值(預(yù)測(cè)值)predict1,通過(guò)作圖,計(jì)算Mse,Mape,R方等指標(biāo),來(lái)對(duì)比predict1和y1的接近程度,就可以知道模型是否預(yù)測(cè)準(zhǔn)確。這是BP模型的測(cè)試過(guò)程,即實(shí)現(xiàn)對(duì)數(shù)據(jù)的預(yù)測(cè),并且對(duì)比實(shí)際值檢驗(yàn)預(yù)測(cè)是否準(zhǔn)確。

在這里插入圖片描述


圖一 3層BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖

1.2 基于歷史值影響的BP神經(jīng)網(wǎng)絡(luò)

以電力負(fù)荷預(yù)測(cè)問(wèn)題為例,進(jìn)行兩種模型的區(qū)分。在預(yù)測(cè)某個(gè)時(shí)間段內(nèi)的電力負(fù)荷時(shí):

一種做法,是考慮?t?時(shí)刻的氣候因素指標(biāo),比如該時(shí)刻的空氣濕度x1,溫度x2,以及節(jié)假日x3等的影響,對(duì)?t?時(shí)刻的負(fù)荷值進(jìn)行預(yù)測(cè)。這是前面1.1所說(shuō)的模型。

另一種做法,是認(rèn)為電力負(fù)荷值的變化,與時(shí)間相關(guān),比如認(rèn)為t-1,t-2,t-3時(shí)刻的電力負(fù)荷值與t時(shí)刻的負(fù)荷值有關(guān)系,即滿足公式y(tǒng)(t)=F(y(t-1),y(t-2),y(t-3))。采用BP神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練模型時(shí),則輸入到神經(jīng)網(wǎng)絡(luò)的影響因素值為歷史負(fù)荷值y(t-1),y(t-2),y(t-3),特別地,3叫做自回歸階數(shù)或者延遲。給到神經(jīng)網(wǎng)絡(luò)中的目標(biāo)輸出值為y(t)。

?1.3 差分進(jìn)化算法

Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一樣,DE是一種模擬生物進(jìn)化的隨機(jī)模型,通過(guò)反復(fù)迭代,使得那些適應(yīng)環(huán)境的個(gè)體被保存了下來(lái)。但相比于進(jìn)化算法,DE保留了基于種群的全局搜索策略,采用實(shí)數(shù)編碼、基于差分的簡(jiǎn)單變異操作和一對(duì)一的競(jìng)爭(zhēng)生存策略,降低了遺傳操作的復(fù)雜性。同時(shí),DE特有的記憶能力使其可以動(dòng)態(tài)跟蹤當(dāng)前的搜索情況,以調(diào)整其搜索策略,具有較強(qiáng)的全局收斂能力和魯棒性,且不需要借助問(wèn)題的特征信息,適于求解一些利用常規(guī)的數(shù)學(xué)規(guī)劃方法所無(wú)法求解的復(fù)雜環(huán)境中的優(yōu)化問(wèn)題。目前,DE已經(jīng)在許多領(lǐng)域得到了應(yīng)用,譬如人工神經(jīng)元網(wǎng)絡(luò)、化工、電力、機(jī)械設(shè)計(jì)、機(jī)器人、信號(hào)處理、生物信息、經(jīng)濟(jì)學(xué)、現(xiàn)代農(nóng)業(yè)、食品安全、環(huán)境保護(hù)和運(yùn)籌學(xué)等。

DE 算法主要用于求解連續(xù)變量的全局優(yōu)化問(wèn)題,其主要工作步驟與其他進(jìn)化算法基本一致,主要包括變異(Mutation)、交叉(Crossover)、選擇(Selection)三種操作。算法的基本思想是從某一隨機(jī)產(chǎn)生的初始群體開(kāi)始,利用從種群中隨機(jī)選取的兩個(gè)個(gè)體的差向量作為第三個(gè)個(gè)體的隨機(jī)變化源,將差向量加權(quán)后按照一定的規(guī)則與第三個(gè)個(gè)體求和而產(chǎn)生變異個(gè)體,該操作稱(chēng)為變異。然后,變異個(gè)體與某個(gè)預(yù)先決定的目標(biāo)個(gè)體進(jìn)行參數(shù)混合,生成試驗(yàn)個(gè)體,這一過(guò)程稱(chēng)之為交叉。如果試驗(yàn)個(gè)體的適應(yīng)度值優(yōu)于目標(biāo)個(gè)體的適應(yīng)度值,則在下一代中試驗(yàn)個(gè)體取代目標(biāo)個(gè)體,否則目標(biāo)個(gè)體仍保存下來(lái),該操作稱(chēng)為選擇。在每一代的進(jìn)化過(guò)程中,每一個(gè)體矢量作為目標(biāo)個(gè)體一次,算法通過(guò)不斷地迭代計(jì)算,保留優(yōu)良個(gè)體,淘汰劣質(zhì)個(gè)體,引導(dǎo)搜索過(guò)程向全局最優(yōu)解逼近。

算法圖解:

算法偽代碼:

2 部分代碼

%% 差分進(jìn)化算法應(yīng)用于優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的初始權(quán)值和閾值 %% 清空環(huán)境變量 clear all; clc; warning off load v357; load y357; Pn_train=v; Tn_train=y; Pn_test=v; Tn_test=y; P_train=v; T_train=y; % P_train=[0 25.27 44 62.72 81.4 100.2; % ? ? 290.5 268.8 247.2 224.5 206 184.4; % ? ? 0 16.12 33.25 50.42 67.62 84.73; % ? ? 542.5 517.8 493 465.3 435.6 410.8; % ? ? 0 11.1 28.1 44.93 61.38 78.57; % ? ? 826.1 800.2 769.1 740.0 706.2 669.3]; % T_train=[0 1 2 3 4 5];%以上是未處理的數(shù)據(jù) % ?P_test=[0 25.25 43 62.75 81.6 100.7; % ? ? 290.3 268.4 247.5 224.6 206 184.2; % ? ? 0 16.14 33.26 50.47 67.68 84.79; % ? ? 542.7 517.9 495 465.8 435.6 410.9; % ? ? 0 11.4 28.6 44.94 61.36 78.59; % ? ? 826.3 800.7 769.8 740.5 706.7 669.3]; % T_test=[0 1 2 3 4 5]; % Pn_train=[0 0.252 0.439 0.626 0.813 1 0 0.19 0.392 0.595 0.798 1 0 0.141 0.358 0.572 0.781 1; % ? ? ? ? ? 1 0.795 0.592 0.378 0.204 0 1 0.815 0.626 0.415 0.189 0 1 0.835 0.637 0.451 0.235 0]; % %T 為目標(biāo)矢量 ,歸一化后的數(shù)據(jù) % Tn_train=[0.05,0.23,0.41,0.59,0.77,0.95,0.05,0.23,0.41,0.59,0.77,0.95,0.05,0.23,0.41,0.59,0.77,0.95]; % Pn_test=[ 0 0.17 0.39 0.595 0.798 1 0 0.141 0.358 0.572 0.781 1 0 0.258 0.439 0.626 0.813 1; % ? ? ? ? ?1 0.815 0.625 0.415 0.189 0 1 0.835 0.635 0.451 0.235 0 1 0.795 0.599 0.378 0.204 0 ]; % Tn_test=[0.05,0.23,0.41,0.59,0.77,0.95,0.05,0.23,0.41,0.59,0.77,0.95,0.05,0.23,0.41,0.59,0.77,0.95]; %% 參數(shù)設(shè)置 S1 = size(Pn_train,1); ? ? ? ? ? ? ?% 輸入層神經(jīng)元個(gè)數(shù) S2 = 6; ? ? ? ? ? ? ? ? ? ? ? ? ? ?% 隱含層神經(jīng)元個(gè)數(shù) S3 = size(Tn_train,1); ? ? ? ? ? ? ?% 輸出層神經(jīng)元個(gè)數(shù) Gm=10; ? ?%最大迭代次數(shù) F0=0.5; ? ? ?%F為縮放因子 Np=5; %種群規(guī)模 CR=0.5; ?%雜交參數(shù) G=1;%初始化代數(shù) N=S1*S2 + S2*S3 + S2 + S3;%所求問(wèn)題的維數(shù) % 設(shè)置網(wǎng)絡(luò)初始權(quán)值和閾值 net_optimized.IW{1,1} = W1; net_optimized.LW{2,1} = W2; net_optimized.b{1} = B1; net_optimized.b{2} = B2; % 設(shè)置訓(xùn)練參數(shù) net_optimized.trainParam.epochs = 3000; net_optimized.trainParam.show = 100; net_optimized.trainParam.goal = 0.001; net_optimized.trainParam.lr = 0.1; % 利用新的權(quán)值和閾值進(jìn)行訓(xùn)練 net_optimized = train(net_optimized,Pn_train,Tn_train); %% 仿真測(cè)試 Tn_sim_optimized = sim(net_optimized,Pn_test); ? ? % 結(jié)果對(duì)比 result_optimized = [Tn_test' Tn_sim_optimized']; %均方誤差 E_optimized = mse(Tn_sim_optimized - Tn_test) MAPE_optimized = mean(abs(Tn_sim_optimized-Tn_test)./Tn_sim_optimized)*100 % figure(1) % % plot(T_train,P_train(1,:),'r') % hold on % plot(T_train,P_train(3,:),'y') % hold on % plot(T_train,P_train(5,:),'b') % hold on % grid on % xlabel('標(biāo)準(zhǔn)設(shè)備的約定真值(10KP)'); % ?ylabel('壓力傳感器的輸出(mv)'); % ?title('壓力傳感器的工作曲線'); % ?legend('t=22','t=44','t=70'); figure(2) plot(Tn_train(1:6),Pn_train(1,1:6),'r') hold on plot(Tn_train(7:12),Pn_train(1,7:12),'y') hold on plot(Tn_train(13:18),Pn_train(1,13:18),'b') hold on grid on xlabel('設(shè)備約定真值(10KP)'); ylabel('壓力傳感器的輸出(mv)'); title('歸一化后的訓(xùn)練樣本壓力傳感器的工作曲線'); legend('t=22','t=44','t=70'); figure(3) plot(Tn_test(1:6),Pn_test(1,1:6),'r') hold on plot(Tn_test(7:12),Pn_test(1,7:12),'y') hold on plot(Tn_test(13:18),Pn_test(1,13:18),'b') hold on grid on xlabel('設(shè)備約定真值(10KP)'); ylabel('壓力傳感器的輸出(mv)'); title('歸一化后的測(cè)試樣本壓力傳感器的工作曲線'); legend('t=22','t=44','t=70'); figure(4) plot(Tn_test(1:6),Tn_sim_optimized(1:6),'r')%輸出DE-BP仿真結(jié)果的曲線 hold on plot(Tn_test(7:12),Tn_sim_optimized(7:12),'y') hold on plot(Tn_test(13:18),Tn_sim_optimized(13:18),'b') hold on xlabel('約定真值(10KP)'); ylabel('壓力傳感器的輸出(mv)'); title('DE-BP的壓力傳感器的工作曲線'); legend('t=22','t=44','t=70'); grid on %% 未優(yōu)化的BP神經(jīng)網(wǎng)絡(luò) %net = newff(Pn_train,Tn_train,S2); net=newff(minmax(Pn_train),[6,1],{'logsig','purelin'},'traingdm');%隱含層神經(jīng)元S型正切,輸出層S型對(duì)數(shù),動(dòng)量梯度下降法訓(xùn)練BP網(wǎng)絡(luò), % 設(shè)置訓(xùn)練參數(shù) net.trainParam.epochs = 3000; net.trainParam.show = 100; net.trainParam.goal = 0.001; net.trainParam.lr = 0.1; net=init(net); inputWeights=net.IW{1,1};% 當(dāng)前輸入層權(quán)值和閾值 inputbias=net.b{1}; layerWeights=net.LW{2,1};% 當(dāng)前網(wǎng)絡(luò)層權(quán)值和閾值 layerbias=net.b{2} % 利用新的權(quán)值和閾值進(jìn)行訓(xùn)練 net = train(net,Pn_train,Tn_train); %% 仿真測(cè)試 Tn_sim = sim(net,Pn_test); ? ? %% 結(jié)果對(duì)比 result = [Tn_test' Tn_sim']; % 均方誤差 E1 = mse(Tn_sim - Tn_test) MAPE1= mean(abs(Tn_sim-Tn_test)./Tn_sim)*100 % end % figure(4) % plot(T_train,P_train(1,:),'r') % hold on % plot(T_train,P_train(3,:),'y') % hold on % plot(T_train,P_train(5,:),'b') % hold on % grid on % xlabel('標(biāo)準(zhǔn)設(shè)備的約定真值(10KP)'); % ?ylabel('壓力傳感器的輸出(mv)'); % ?title('壓力傳感器的工作曲線'); % ?legend('t=22','t=44','t=70'); figure(5) plot(Tn_test(1:6),Tn_sim(1:6),'r')%輸出BP仿真結(jié)果的曲線 hold on plot(Tn_test(7:12),Tn_sim(7:12),'y') hold on plot(Tn_test(13:18),Tn_sim(13:18),'b') hold on xlabel('約定真值(10KP)'); ylabel('壓力傳感器的輸出(mv)'); title('BP的壓力傳感器的工作曲線'); legend('t=22','t=44','t=70'); grid on

3 仿真結(jié)果

?

4 參考文獻(xiàn)

[1]牛慶,曹愛(ài)民,陳瀟一,周冬.基于花朵授粉算法和BP神經(jīng)網(wǎng)絡(luò)的短期負(fù)荷預(yù)測(cè)[J].電網(wǎng)與清潔能源,2020,36(10):28-32.



【預(yù)測(cè)模型】基于差分進(jìn)化算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)數(shù)據(jù)預(yù)測(cè)matlab源碼的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
微山县| 临清市| 天津市| 遂宁市| 林芝县| 武鸣县| 霸州市| 大化| 贵定县| 清新县| 松溪县| 铁岭市| 泾川县| 民和| 平乐县| 福建省| 沿河| 永和县| 得荣县| 霍林郭勒市| 兴国县| 饶阳县| 桦甸市| 永平县| 永吉县| 阳春市| 滦平县| 郧西县| 吐鲁番市| 武城县| 固原市| 南汇区| 仙桃市| 昌江| 故城县| 平和县| 宣汉县| 南投市| 霍林郭勒市| 阆中市| 乐至县|