一、径向基神经网络的函数
1.创建函数(1)newrb函数
该函数用于设计一个径向基神经网络:
[net,tr]=newrb(P,T,goal,spread,MN,DF)
其中,P为Q组输入向量;T为Q组目标分类向量;goal为均方误差,默认为;spread为径向基函数的分布,默认值为1;MN为神经元的最大数目,默认值为Q;DF为两次显示之间所添加的神经元数目,默认为25;net为生成的径向基网络;tr为生成的训练记录。
在上述代码中,可自行修改spread参数的值,观察结果有何不同,加入用代码net=newrb(p,t,0,0.6);替换为net=newrb(p,t);可以讲spread参数从默认值1改为0.6,使拟合的曲线更加精细,拟合效果如上图所示。
(2)newrbe函数
该函数用于设计一个准确的径向基网络。函数的调用格式为:
net=newrbe(P,T,spread)
其中,P为Q组输入向量;T为Q组目标分类向量;spread为径向基函数的分布,默认值为1.
(3)newpnn函数
该函数可用于创建概率神经网络,概率神经网络是一种适用于分类问题的径向基函数。函数的调用格式为:
net=newpnn(P,T,spread)
其中,输入参数P为输入向量;T为目标向量;spread为径向基函数的分布密度,参数spread的大小对网络逼近精度有很大影响,需要不断调整spread的值。spread越小,函数的比较越精确,但是逼近的过程就越粗糙;spread越大,逼近过程就比较平滑,但是逼近的误差会比较大。
newpnn创建的是一个两层的神经网络:第一层的神经元是径向基神经元,用dist函数计算加权输入,用netprod计算网络输入;第二层的神经元是竞争神经元,用dotprod函数计算加权输入,用netsum函数计算网络输入。其中只有第一层包含阈值。网络将第一层的权值设置为P,第一层的阈值设置为0.8326/spread,且加权输入为±spread时,径向基函数取值恰好为0.5,第二层的权值被设置为T。(4)newgrnn函数
该函数可用于设计一个广义回归神经网络。广义回归神经网络是径向基神经网络的一种,通常用于函数逼近。函数的调用格式为:
net=newgrnn(P,T,spread)
其中,输入参数P为输入向量;T为输出向量;spread为径向基函数的分布函数,参数spread的大小对网络的逼近精度有很大的影响,需要不断地调整spread的值。
2.传递函数
在matlab神经网络工具箱中,提供了radbas函数用于实现径向基函数网络的传递。函数的调用格式为:
A = radbas(N,FP)
其中,输入参数N为SxQ维的网络输入(列)向量矩阵;FP为性能参数(可忽略),返回网络输入向量N的输出矩阵A。
3.转换函数
ind2vec(ind):将数据索引转换为向量组,其中ind2vec函数输入为包含n个下标的行向量ind,调用后可以得到m行n列的向量组矩阵,结果是矩阵中的每个向量I,除了ind中的第I个元素指定位置为1外,其余元素为,结果矩阵的行数等于ind中最大的下标值。
vec2ind(vec):该函数的功能是将单值向量变换成下标值。
4.权函数
1.dist函数
计算欧几里得距离
2.normprod函数
用于实现规范点积权函数
5.竞争性传递函数
A=compet(N,FP)
二、径向基审计网络的应用1.概率分类问题
clearall;
p=[1,2;2,2;1,1]';
t=[1,2,3];
%绘制输入向量及其相应的类别
plot(p(1,:),p(2,:),'r.','markersize',30);
fori=1:3
text(p(1,i)+0.1,p(2,i),sprintf('class %g',t(i)));
end
axis([0 3 0 3]);
%将期望类别指针t转换为向量tc
tc=ind2vec(t);
spread=1;
net=newpnn(p,tc,spread);
a=sim(net,p);
ac=vec2ind(a);
plot(p(1,:),p(2,:),'r.','markersize',30);
axis([0 3 0 3]);
fori=1:3
text(p(1,i)+0.1,p(2,i),sprintf('class %g',ac(i)));
end
%在对新输入向量p进行测试
p=[2;1.5];
a=sim(net,p);
ac=vec2ind(a);
holdon
plot(p(1),p(2),'*','markersize',10,'color',[1 0 0]);
text(p(1)+0.1,p(2),sprintf('class %g',ac));
% hold off
xlabel('p(1,:)与p(1)')
ylabel('p(2,:)与p(2)')
%通过立体图显示三个类别所在面的情况及新的输入向量对应的类别
p1=0:0.05:3;
p2=p1;
[p1,p2]=meshgrid(p1,p2);
pp=[p1(:),p2(:)]';
aa=sim(net,pp);
aa=full(aa);
m=mesh(p1,p2,reshape(aa(1,:),length(p1),length(p2)));
set(m,'facecolor',[0 0.5 1],'linestyle','none');
holdon
m=mesh(p1,p2,reshape(aa(2,:),length(p1),length(p2)));
set(m,'facecolor',[0 0.1 0.5],'linestyle','none');
m=mesh(p1,p2,reshape(aa(3,:),length(p1),length(p2)));
set(m,'facecolor',[0.5 0 1],'linestyle','none');
plot3(p(1,:),p(2,:),[1 1 1]+0.1,'.','markersize',30);
plot3(p(1),p(2),1.1,'*','markersize',10,'color',[1 0 0]);
2.GRNN网络实现曲线拟合
广义回归神经网络以径向基网络为基础发展而来,相比径向基网络,更适合解决曲线你和问题,而且速度更快。
clearall;
x=-9:8;
y=[129,-32,-118,-138,-125,-97,-55,-23,-4,2,1,-31,-72,-121,-142,-174,-155,-77];
plot(x,y,'ro');
p=x;
t=y;
tic;
net=newrb(p,t,0,2);
toc
xx=-9:0.2:8;
yy=sim(net,xx);
holdon;
plot(xx,yy);
tic;
net2=newgrnn(p,t,0.5);
toc
yy2=sim(net2,xx);
plot(xx,yy2,'.-k');
legend('原始数据','径向基拟合','广义回归拟合');
领取专属 10元无门槛券
私享最新 技术干货