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