www.pudn.com > pnn_recognition.rar > demopnn1.m


%% PNN Classification 
% This demonstration uses functions NEWPNN and SIM. 
% 
% Copyright 1992-2002 The MathWorks, Inc. 
% $Revision: 1.9 $  $Date: 2002/03/29 19:36:07 $ 
 
%% 
% Here are three two-element input vectors P and their associated classes Tc. 
% We would like to create a probabilistic neural network that classifes these 
% vectors properly. 
 
P = [1 2; 2 2; 1 1]'; 
Tc = [1 2 3]; 
plot(P(1,:),P(2,:),'.','markersize',30) 
for i=1:3, text(P(1,i)+0.1,P(2,i),sprintf('class %g',Tc(i))), end 
axis([0 3 0 3]) 
title('Three vectors and their classes.') 
xlabel('P(1,:)') 
ylabel('P(2,:)') 
pause 
 
%% 
% First we convert the target class indices Tc to vectors T.  Then we design a 
% probabilistic neural network with NEWPNN.  We use a SPREAD value of 1 because 
% that is a typical distance between the input vectors. 
 
T = ind2vec(Tc); 
spread = 1; 
net = newpnn(P,T,spread); 
 
%% 
% Now we test the network on the design input vectors.  We do this by simulating 
% the network and converting its vector outputs to indices. 
 
A = sim(net,P); 
Ac = vec2ind(A); 
plot(P(1,:),P(2,:),'.','markersize',30) 
axis([0 3 0 3]) 
for i=1:3,text(P(1,i)+0.1,P(2,i),sprintf('class %g',Ac(i))),end 
title('Testing the network.') 
xlabel('P(1,:)') 
ylabel('P(2,:)') 
pause 
%% 
% Let's classify a new vector with our network. 
 
p = [2; 1.5]; 
a = sim(net,p); 
ac = vec2ind(a); 
hold on 
plot(p(1),p(2),'.','markersize',30,'color',[1 0 0]) 
text(p(1)+0.1,p(2),sprintf('class %g',ac)) 
hold off 
title('Classifying a new vector.') 
xlabel('P(1,:) and p(1)') 
ylabel('P(2,:) and p(2)') 
pause; 
%% 
% This diagram shows how the probabilistic neural network divides the input 
% space into the three classes. 
 
p1 = 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'); 
hold on 
m = mesh(P1,P2,reshape(aa(2,:),length(p1),length(p2))); 
set(m,'facecolor',[0 1.0 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',30,'color',[1 0 0]) 
hold off 
view(2) 
title('The three classes.') 
xlabel('P(1,:) and p(1)') 
ylabel('P(2,:) and p(2)')