📄 jingzhengceng.m
字号:
% 利用竞争层网络对样本数据进行分类%本例中待分类的样本数据由nngenc函数随机产生,即P=nngenc(range,class,num,std); 其中,参数class表示样本数据的类别个数。然后利用newc函数%建立竞争层网络:net=newc(range,class,klr,clr); 其中,class是数据类别个数,也是竞争层神经元个数;klr和clr 分别是网络的权值学习速率%和阈值学习速率。竞争层网络在训练时不需要目标输出,网络通过对数据分布特性的学习,自动地将数据划分为指定类别数。%网络训练语句如下(其中,默认的训练函数为trainr):net=train(net,P);%在对训练好的网络进行仿真时,网络的输出为单值矢量组,为了观察方便,一般要将单值矢量组转化为下标矩阵的形式:% Y=sim(net,P); Y1=vec2ind(Y);%本例完整的MATLAB程序如下:close allclf resetfigure(gcf);echo onclc% NEWC---创建竞争层网络% TRAIN---对竞争层网络进行训练% SIM---对竞争层网络进行仿真pauseclc% 产生样本数据P,P中包括三类共30个二维矢量range=[-1 1;-1 1]; % 样本数据取值范围class=3; % 样本数据类别数num=10; % 每类样本数据的个数std=0.1; % 每类样本数据的方差P=nngenc(range,class,num,std);pauseclc% 画第一幅图:样本数据分布图plot(P(1,:),P(2,:),'*','markersize',5);axis([-1.5 1.5 -1.5 1.5]);pauseclc% 建立竞争层网络(由于样本数据分为三类,因此竞争层由三个神经元构成)klr=0.1; % 权值学习速率clr=0.01; % 阈值学习速率net=newc(range,class,klr,clr);pauseclc% 对网络进行训练net.trainParam.epochs=5; %训练过程每五步显示一次net=train(net,P); pauseclc%在第一幅图上画竞争层神经元权值,也就是每类样本的聚类中心w=net.IW{1};hold on;plot(w(:,1),w(:,2),'ob');title('Input data & Weights');pauseclc%利用原始样本数据对网络进行仿真Y=sim(net,P);Y1=vec2ind(Y)pauseclc% 画第二幅图:用不同符号标注数据分类结果figure;for i=1:30 if Y1(i)==1 plot(P(1,i),P(2,i),'*','markersize',5); elseif Y1(i)==2 plot(P(1,i),P(2,i),'+','markersize',5); else plot(P(1,i),P(2,i),'x','markersize',5); end hold on;end axis([-1.5 1.5 -1.5 1.5]); title('class 1:* class 2:+ class 3:x');pauseclc%利用一组新的输入数据检验网络性能p=[-0.4 -0.4;-0.1 0.9];y=sim(net,p);y1=vec2ind(y)echo off% 程序运行结果如图所示。在图中,待分类的样本数据用星号标注,网络训练完毕后的竞争层神经元%权值由圆圈标注。在图中,已经划分好的三类数据分别用星号、加号和“x”符号标注。% (a) 待分类样本的数据和竞争层神经元权值 (b) 网络分类结果
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -