A very, very brief LVQ tutorial
Since the LVQ approach isn't really covered by the book, this is a
very brief and informal tutorial on how the method can be
implemented. Note, that there are several variations of LVQ around,
and this is just one very simple version. So if you've found something
that behaves a bit differently, don't worry. :)
A basic Learning Vector Quantization (LVQ) approach may be defined
as:
- Take m_i prototype vectors (also often called codebook
vectors). There may be one or more prototype vectors per
class, usually more than one is used.
- Let c = arg min(||x - m_i||) define the nearest m_i to an
input vector x, denoted by m_c. When classifying, x is usually
taken to belong to the class of it's nearest prototype
vector, but m_c is also used in the learning phase.
- Now the learning proceeds (with modifying only the
nearest prototype m_c(t) for the input x(t) each step t) as in
m_c(t + 1) = m_c(t) + alpha(t)[x(t) - m_c(t)],
if x and m_c belong to the same class
m_c(t + 1) = m_c(t) - alpha(t)[x(t) - m_c(t)],
if x and m_c belong to different classes.
- 0 < alpha(t) < 1 is the learning coefficient. It may be
constant or decrease monotonically with time. For example in
the lvq_pak LVQ1, an alpha initially smaller than 0.1 and
decreasing linearly with time is used.
- The iteration is generally stopped either after a
predefined number of steps, when alpha(t) reaches its minumum
value or when a desired training set error rate is reached.