GRNN神经网络---广义回归神经网络,主要用于函数逼近。
?
x=-2:0.01:1y=2*x.^6+3*x.^5-3*x.^3+x.^2+1P=x(1:15:end)T=y(1:15:end)spread=[0.05 0.2 0.4 0.6 0.8];l_style={'r.-','bo--','ko-.','k*--','r^-'};for i=1:length(spread)??? net=newgrnn(P,T,spread(i));??? a=sim(net,P);??? plot(P,a,l_style{i})??? hold on endplot(P,T,'o');legend('spread=0.05','spread=0.2','spread=0.4','spread=0.6','spread=0.8','train data');title('GRNN神经网络spread探讨')
load data;
% 载入数据并将数据分成训练和预测两类
p_train=p(1:10,:);
p_test=p(11:13,:);
t_train=t(1:10,:);
t_test=t(11:13,:);
% 将各个矩阵转置以便适应网络结构
p_train=p_train';
t_train=t_train';
p_test=p_test';
t_test=t_test';
% 将数据归一化
[pn,minp,maxp,tn,mint,maxt]=premnmx(p_train,t_train);
p2n=tramnmx(p_test,minp,maxp);
for sc=0.1:0.01:1;
tic,
net=newgrnn(pn,tn,sc);
sc
toc
Out=sim(net,p2n);
a2=postmnmx(Out,mint,maxt);
e=t_test-a2';
perf=mse(e);
Y=sim(net,pn);
a3=postmnmx(Y,mint,maxt);
ep=a3-t_train;
perfp=mse(ep);
hold on;
figure(1);
title('网络的预测误差')
plot(sc,perf,'g:*');
hold on;
figure(2);
title('网络的逼近误差')
plot(sc,perfp,'r:*');
end
%通用感应器神经网络。P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1 50];%输入向量T=[1 1 0 0 1];%期望输出plotpv(P,T);%描绘输入点图像net=newp([-40 1;-1 50],1);%生成网络,其中参数分别为输入向量的范围和神经元感应器数量hold onlinehandle=plotpc(net.iw{1},net.b{1});net.adaptparam.passes=3;for a=1:25%训练次数[net,Y,E]=adapt(net,P,T);linehandle=plotpc(net.iw{1},net.b{1},linehandle);drawnow;end%通用newlin程序%通用线性网络进行预测time=0:0.025:5;T=sin(time*4*pi);Q=length(T);P=zeros(5,Q);%P中存储信号T的前5(可变,根据需要而定)次值,作为网络输入。P(1,2:Q)=T(1,1:(Q-1));P(2,3:Q)=T(1,1:(Q-2));P(3,4:Q)=T(1,1:(Q-3));P(4,5:Q)=T(1,1:(Q-4));P(5,6:Q)=T(1,1:(Q-5));plot(time,T)%绘制信号T曲线xlabel('时间');ylabel('目标信号');title('待预测信号');net=newlind(P,T);%根据输入和期望输出直接生成线性网络a=sim(net,P);%网络测试figure(2)plot(time,a,time,T,'+')xlabel('时间');ylabel('输出-目标+');title('输出信号和目标信号');e=T-a;figure(3)plot(time,e)hold onplot([min(time) max(time)],[0 0],'r:')%可用plot(x,zeros(size(x)),'r:')