【BP預(yù)測】基于遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)股價預(yù)測附Matlab代碼

1 簡介

為了提高 BP 神經(jīng)網(wǎng)絡(luò)預(yù)測模型對混沌時間序列的預(yù)測準(zhǔn)確性, 提出了一種基于遺傳算法優(yōu)化 BP 神經(jīng)網(wǎng)絡(luò)的改進混沌時間序列預(yù)測方法. 利用遺傳算法優(yōu)化 BP 神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值, 然后訓(xùn)練 BP 神經(jīng)網(wǎng)絡(luò)預(yù)測模型以求得最優(yōu)解, 并將該預(yù)測方法應(yīng)用到幾個典型混沌時間序列和實測短時交通流時間序列進行有效性驗證. 仿真結(jié)果表明, 該方法對股價具有較好的非線性擬合能力和更高的預(yù)測準(zhǔn)確性.

2 部分代碼

clear all

clc

close all

tic

%% 全局變量

global pn

global tn

global R

global S2

global S1

global S

S1 = 12;

%% 數(shù)據(jù)處理

load data.mat

X=xlsread('數(shù)據(jù).xls');

data = [data X(:,end)];

% 85%用于訓(xùn)練,15%進行預(yù)測

nn = floor(0.85*size(data,1));

input=data(1:nn,1:3)';

output=data(1:nn,end)';

input_test=data(nn+1:end,1:3)';

output_test=data(nn+1:end,end)';

M =size(input,2); %輸入節(jié)點個數(shù)

N =size(output,2);%輸出節(jié)點個數(shù)

%% 訓(xùn)練數(shù)據(jù)

p = input;

t = output;

[pn,minp,maxp,tn,mint,maxt] =premnmx(p,t);%歸一化

%% 建立神經(jīng)網(wǎng)絡(luò)

net = newff(minmax(pn),[S1,1],{'tansig','purelin'});

net.trainParam.show = 50;

net.trainParam.lr = 0.1;

net.trainParam.epochs = 1000;

net.trainParam.goal =1e-10;

[net,tr] = train(net,pn,tn);

%% 遺傳操作

R = size(p,1);

S2= size(t,1);

S = R*S1+S1*S2+S1+S2;

aa = ones(S,1)*[-1 1];

popu = 50;

initPpp = initializega(popu,aa,'gabpEval');

gen = 500;

[x,endPop,bPop,trace] = ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,...

? ? 'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);

%% 畫圖迭代圖

figure(1)

plot(trace(:,1),1./trace(:,3),'r-');

hold on

grid on

plot(trace(:,1),1./trace(:,2),'b-');

xlabel('迭代數(shù)')

ylabel('均方誤差')

title('均方誤差曲線圖')

figure(2)

plot(trace(:,1),trace(:,3),'r-');

hold on

grid on

plot(trace(:,1),trace(:,2),'b-');

xlabel('迭代數(shù)')

ylabel('適應(yīng)度函數(shù)值')

title('適應(yīng)度函數(shù)迭代曲線圖')

[W1,B1,W2,B2,val] = gadecod(x);

W1;

W2;

B1;

B2;

net.IW{1,1} = W1;

net.LW{2,1} = W2;

net.b{1} = B1;

net.b{2} = B2;

net = train(net,pn,tn);

k = input_test;

kn = tramnmx(k,minp,maxp);

s_bp = sim(net,kn);

s_bp22 = postmnmx(s_bp,mint,maxt);

toc

load gabp.mat

xk=2;

figure

plot(1:length(output_test),output_test,'r-*',1:length(output_test),s_bp22,'b-o','linewidth',xk)

grid on%加網(wǎng)格

legend('真實值','預(yù)測值')%圖例

title('神經(jīng)網(wǎng)預(yù)測真實值與預(yù)測值對比')%標(biāo)題

xlabel('樣本')%橫坐標(biāo)標(biāo)題

ylabel('成交額')%縱坐標(biāo)標(biāo)題

xk = 2;

error2 = abs(s_bp22 - output_test)./output_test.*100;

figure%畫圖

plot(1:length(error2),error2,'ko-','linewidth',xk)%測試輸出與真實值的對比圖

grid on%加網(wǎng)格

title('測試樣本相對誤差圖%')%標(biāo)題

xlabel('樣本')%橫坐標(biāo)標(biāo)題

ylabel('相對誤差%')%縱坐標(biāo)標(biāo)題

zh_gabp = [output_test ;s_bp22; error2]

save zh_gabp zh_gabp

3 仿真結(jié)果

4 參考文獻

博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。

部分理論引用網(wǎng)絡(luò)文獻,若有侵權(quán)聯(lián)系博主刪除。

完整代碼獲取關(guān)注微信公眾號天天matlab

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容