LVQ – Learning Vector Quantization help lvq Vytvoření LVQ sítě: newlvq. Architektura:
Kompetitivní vrstva klasifikuje vstupní vektory stejným způsobem jako u SOM, vytváří až S1 tříd (S1 je počet neuronů v kompet. vrstvě). Lineární vrstva transformuje třídy vytvořené v kompetitivní vrstvě do požadovaných S2 tříd (target classification) (S2 je počet neuronů v kompet. vrstvě). Třídy vytvořené v kompetivní vrstvě se nazývají subclasses a třídy vzniklé v lineární vrstvě se nazývají target classes, požadované třídy. S1 > S2 Vytvoření sítě LVQ: newlvq net = newlvq ( PR, S1, PC, LR, LF ) PR … R x 2 matice min a max hodnot u R vstupních elementů S1 … je počet skrytých neuronů PC … je vektor o S2 elementech tvořený procenty příslušnosti do tídy LR … je krok (rychlost) učení (learning rate ) – default 0.01 LF … je funkce učení – default learnlv1
Příklad: 10 vstupních vektorů, klasifikace do 4 subtříd 4 neurony v první kompetitivní vrstvě 4 subtřídy budou označeny jednou ze dvou tříd a budou tvořeny 2 neurony v druhé, lineární vrstvě P = [ -3 -2 -2 0 0 0 0 +2 +2 +3; 0 +1 -1 +2 +1 -1 -2 +1 -1 0] TC = [1 1 1 2 2 2 2 1 1 1]; net . IW{1, 1} net . IW{2, 1} ans = ans = 0 0 1 1 0 0 0 0 0 0 1 1 0 0 průměr z intervalu (-3, +3) 0 0 midpoint
To nebyl požadavek, musíme trénovat. Simulace sim Y = sim (net, P ); Y = vec2ind (Yb4t) Y = 1 1 1 1 1 1 1 1 1 1 Testovali jsme pomocí vstupního vektoru, proto jedna třída. To nebyl požadavek, musíme trénovat. Trénink train net.trainParam.epochs = 150; net = train( net, P, T ); váhy v první (kompetitivní) vrstvě : net. IW{ 1, 1} ans = 1.0927 0.0051 - 1.1028 - 0.1288 0 - 0.5168 0 0.3710
Chceme klasifikovat do jedné třídy vektory p1, p2, p3, p8, p9, p10 a do druhé třídy vektory p4, p5, p6, p7 Pozn.: lineárně neseparabilní prostory, nelze použít perceptron. Budeme konvertovat Tc matici do target vektoru: T = ind2vec (Tc) targets = full (T) targets = 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 0
První vektor ze vstupu je promítnut se souřadnicemi ( -3 0 ) první sloupec v target (výstupním) vektoru bude tvořit první sloupec, říkáme, že vstupní vektor padne do 1.třídy Vytvoření sítě pomocí newlvq: net = newlvq (minmax (P), 4, [ 0.6 0.4 ], 0.1 ); LF chybí, pokud se použije defaultní hodnota, Nezadává se.
Y = sim (net, P ) Yc = vec2ind (Y) Yc = 1 1 1 2 2 2 2 1 1 1 demolvq1 váhy po natrénování Otestujeme vektoem blízkým vstupu: pchk1 = [ 0; 0.5 ]; Y = sim (net, pchk1); Yc1 = vec2ind (Y) Yc1 = 2 třída 2 pchk2 = [ 1; 0 ]; Y = sim (net, pchk2); Yc2 = vec2ind (Y) Yc2 = 1 třída 1 demolvq1