SOM Toolbox Online documentation http://www.cis.hut.fi/projects/somtoolbox/

# lvq1

### Purpose

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

```

### Syntax

```  sM = lvq1(sM, D, rlen, alpha)

```

### Description

``` 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
i
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.

```

### References

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

```

### 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.

```

### Example

```   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

```