SOM Toolbox Online documentation



 Trains codebook with the LVQ1 -algorithm (described below).



 Trains codebook with the LVQ1 -algorithm. Codebook contains a number
 of vectors (mi, i=1,2,...,n) and so does data (vectors xj,
 j=1,2,...,k).  Both vector sets are classified: vectors may have a
 class (classes are set to the first column of data or map -structs'
 .labels -field). For each xj there is defined the nearest codebook
 -vector index c by searching the minimum of the euclidean distances
 between the current xj and codebook -vectors:

    c = min{ ||xj - mi|| },  i=[1,..,n], for fixed xj
 If xj and mc belong to the same class, mc is updated as follows:
    mc(t+1) = mc(t) + alpha * (xj(t) - mc(t))
 If xj and mc belong to different classes, mc is updated as follows:
    mc(t+1) = mc(t) - alpha * (xj(t) - mc(t))
 Otherwise updating is not performed.

 Argument 'rlen' tells how many times training sequence is performed.
 LVQ1 -algorithm may be stopped after a number of steps, that is
 30-50 times the number of codebook vectors.

 Argument 'alpha' is the learning rate, recommended to be smaller
 than 0.1.

 NOTE: does not take mask into account.


 Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
    Berlin, 1995, pp. 176-179.

 See also LVQ_PAK from

Required input arguments

  sM                The data to be trained.
          (struct)  A map struct.

  D                 The data to use in training.
          (struct)  A data struct.

  rlen    (integer) Running length of LVQ1 -algorithm.

  alpha   (float)   Learning rate used in training.

Output arguments

  codebook          Trained data.
          (struct)  A map struct.


   lab = unique(sD.labels(:,1));         % different classes
   mu = length(lab)*5;                   % 5 prototypes for each    
   sM = som_randinit(sD,'msize',[mu 1]); % initial prototypes
   sM.labels = [lab;lab;lab;lab;lab];    % their classes
   sM = lvq1(sM,sD,50*mu,0.05);          % use LVQ1 to adjust
                                         % the prototypes      
   sM = lvq3(sM,sD,50*mu,0.05,0.2,0.3);  % then use LVQ3 

See also

lvq3 Use LVQ3 algorithm for training.
som_supervised Train SOM using supervised training.
som_seqtrain Train SOM with sequential algorithm.