天天看点

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代码)