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