%利用竞争层网络对样本数据进行分类
range=[-1 1;-1 1];%样本数据取值范围
class=3;%样本分为3类
num=10;%每类样本取10个
std=0.1;%每类样本数据的方差
P=nngenc(range,class,num,std);%产生样本数据P,p中包括三类共10个二维矢量
plot(P(1,:),P(2,:),'*','markersize',5);
axis([-1.5 1.5 -1.5 1.5]);%绘制样本数据分布图
clc
klr=0.1;%权值学习速率
clr=0.01;%阈值学习速率
net=newc(range,class,klr,clr);%建立竞争层网络
clc
net.trainParam.epochs=5;%训练过程每5步显示一次
net=train(net,P)
clc
w=net.IW{1};
hold on;
plot(w(:,1),w(:,2),'ob');%勾画竞争层神经元权值
title('Input data &Weights');
clc
Y=sim(net,P);%利用原始样本数据对网络进行仿真
Y1=vec2ind(Y);
clc
%用不同符号标注数据分类结果
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('class1:* class2:+ class3:x');
clc
%利用一组新的输入数据检验网络性能
p=[-0.4 0.8;-0.1 0.9]
y=sim(net,p);%利用输入样本数据对网络进行仿真
y1=vec2ind(y)%将单位矢量组转化为下标矩阵
echo off