SSC - C5 LVQ - pokračování

advertisement
ASN - C3
LVQ - pokračování
Zdrojový kód - demolvq1
%% Learning Vector Quantization
% An LVQ network is trained to classify input vectors according to given
% targets.
%
% Copyright 1992-2002 The MathWorks, Inc.
% $Revision: 1.14 $ $Date: 2002/03/29 19:36:12 $
%%
% Let P be 10 2-element example input vectors and C be the classes these vectors
% fall into. These classes can be transformed into vectors to be used as
% targets, T, with IND2VEC.
P = [-3 -2 -2 0 0 0 0 +2 +2 +3;
0 +1 -1 +2 +1 -1 - 2 +1 -1 0];
C = [1 1 1 2 2 2 2 1 1 1];
T = ind2vec(C);
% vstupní vektory
% cílové hodnoty (target)
% konverze matice na target vektory
%%
% Here the data points are plotted. Red = class 1, Cyan = class 2. The LVQ
% network represents clusters of vectors with hidden neurons, and groups the
% clusters with output neurons to form the desired classes.
colormap(hsv);
plotvec(P,C)
title('Input Vectors');
xlabel('P(1)');
ylabel('P(2)');
% vykreslení vstupních vektorů
% rozdělených do 2 tříd
%%
% NEWLVQ creates an LVQ layer and here takes four arguments: Rx2 matrix of min
% and max values for R input elements, number of hidden neurons, element vector
% of typical class percentages, and learning rate,
net = newlvq(minmax(P),4,[.6 .4],0.1);
% Vytvořili jsme síť se 4 neurony v 1. vrstvě , inicializace 1. vrstvy pomocí midpoint
% Ve 2. vrstvě je 60% target hodnot ve třídě 1 (v 1. řádku ) a 40% target hodnot ve třídě
% 2 (počet hodnot 1 ve 2.řádku)
% zobrazení 2.vrstvy (výstupní)
% net . LW{2, 1}
% layer weight ...LW (2.vrstva je asociována s
% 2.vrstvou)
% sloupečky (4) představují počet neuronů
% v kompetitivní vrstvě, řádky (2) počet
% lineárních (výstupních) neuronů
% První 2 kompetitivní neurony jsou spojeny s 1. lineárním neuronem (váha 1 v prvním ř,),
% druhé 2 kompetitivní neurony jsou spojeny s 2. lineárním neuronem (váha 1 ve druhém
% řádku),
% ans = 1 1 0 0
%
0 0 1 1
%%
% The competitive neuron weight vectors are plotted as follows.
hold on
W1 = net.IW{1};
plot(W1(1,1),W1(1,2),'ow')
title('Input/Weight Vectors');
xlabel('P(1), W(1)');
ylabel('P(2), W(3)');
% křížky v grafu představují vstupní data
% kolečka v grafu představují centroidy
%%
% To train the network, first override the default number of epochs, and then
% train the network. When it is finished, replot the input vectors '+' and the
% competitive neurons' weight vectors 'o'. Red = class 1, Cyan = class 2.
net.trainParam.epochs=150;
net.trainParam.show=Inf;
net=train(net,P,T);
cla;
plotvec(P,C);
hold on;
plotvec(net.IW{1}',vec2ind(net.LW{2}),'o');
%%
% Now use the LVQ network as a classifier, where each neuron corresponds to a
% different category. Present the input vector [0.2; 1]. Red = class 1, Cyan =
% class 2.
p = [0.2; 1];
a = vec2ind(sim(net,p))
% konvertuje výstup do označených tříd
Download