天天看點

rbf神經網絡python預測代碼_用RBF神經網絡做時間序列預測(附MATLAB代碼)

實驗内容:在MATLAB下,調用工具箱newrb,訓練RBF神經網絡使之能夠利用曆史資料預測未來時間序列資料。

實驗用的是一個正弦電壓波形,在Simulink中仿真後将資料導入excel,再讀取excel中的波形資料。用前一半的資料做訓練樣本,後一半的資料用來檢驗RBF神經網絡的預測準确性。

訓練時,以21個電壓點為一組,第一組樣本第1到第20個電壓為神經網絡輸入,第21個電壓為訓練目标,第二組樣本第2到第21個電壓為輸入,第22個電壓為訓練目标;

附MATLAB代碼:

clc

clear all

%訓練正常波形

y1=xlsread('0.1s 60Hz normal.xls');%讀取波形

n1 =zeros(20,length(y1)/2-20);%設定輸入向量

for n=1:length(y1)/2-20

column=zeros(1,20);

for i=1:20

column(i)=y1(n+i);

end

n1(:,n)=column;

end

x1 = zeros(1,length(y1)/2-20);%設定輸出向量

for n=1:length(y1)/2-20

x1(n)=y1(n+20);

end

xn_train = n1; % 訓練樣本

dn_train = x1; % 訓練目标

P = xn_train;

T = dn_train;

goal = 0.5; % 訓練誤差的平方和(預設為0)

spread = 10; % 此值越大,需要的神經元就越少(預設為1)

MN = size(xn_train,2); % 最大神經元數(預設為訓練樣本個數)

DF = 1; % 顯示間隔(預設為25)

normalnet = newrb(P,T,goal,spread,MN,DF);

%測試

%拟合後的神經網絡預測整個波形

figure(1)

ytest1=xlsread('0.1s 60Hz normal.xls');

ytest_p=zeros(20,length(y1)-20);%測試預測能力

for n=1:length(y1)-20

column=zeros(1,20);

for i=1:20

column(i)=y1(n+i);

end

ytest_p(:,n)=column;

end

yout=zeros(1,length(y1)-20);

%前20個點預設與實際波形相同,從第21個點開始預測

for i=1:20

yout(i)=ytest1(i);

end

for i=21:length(yout)

yout(i)=sim(normalnet,ytest_p(:,i-20));

end

t=[0:0.2/length(yout):0.2-0.2/length(yout)];

plot(t,yout)

hold on

n=[0:0.2/length(yout):(length(ytest1)-1)*0.2/length(yout)];

plot(n,ytest1,'r')

hold on

legend('預測波形','實際波形')

xlabel('時間');

ylabel('電壓');

神經網絡訓練:

rbf神經網絡python預測代碼_用RBF神經網絡做時間序列預測(附MATLAB代碼)
rbf神經網絡python預測代碼_用RBF神經網絡做時間序列預測(附MATLAB代碼)

可以看到0-0.1s前一半資料是完全重合的,後一半預測部分稍有偏差不過問題不大。

rbf神經網絡python預測代碼_用RBF神經網絡做時間序列預測(附MATLAB代碼)