in

Aprendizaje de cuantificación vectorial

1ZB0HaC7Dagtv4Zbi8nCmHQ

Aprendizaje de cuantificación vectorial

Introducción al aprendizaje basado en prototipos

Thomas Nijman

22 de diciembre de 2019·4 min de lectura

1*ZB0HaC7Dagtv4Zbi8nCmHQ

Hoy en día, los términos aprendizaje automático y redes neuronales artificiales parecen aplicarse de manera intercambiable.y. Sin embargo, cuando se trata de algoritmos ML, hay mucho más bajo el sol que solo redes neuronales. De hecho, durante la universidad, la mayoría de los proyectos de ML que hice no usaban redes neuronales en absoluto. Pero, ¿por qué iba uno a utilizar otra cosa que no fueran redes neuronales? Es cierto que las redes neuronales pueden lograr resultados asombrosos en problemas muy complejos. Sin embargo, hay algunos problemas clave. Requieren grandes conjuntos de datos y mucha potencia computacional, especialmente esta última no siempre está al alcance de uno. ¡Y a menudo no tiene mucho sentido usar algo tan complejo como una red neuronal para problemas bastante pequeños y simples, donde otros algoritmos son más rápidos y potencialmente mejores!

El aprendizaje de la cuantificación vectorial (LVQ) es uno de esos algoritmos que he usado mucho. Si bien el algoritmo en sí no es particularmente poderoso en comparación con otros, es sorprendentemente simple e intuitivo. Además, tiene algunas extensiones que pueden hacer del algoritmo una herramienta poderosa en una variedad de tareas relacionadas con ML.

LVQ es un método de aprendizaje basado en prototipos. Se utilizan uno o más prototipos para representar cada clase en el conjunto de datos, cada prototipo se describe como un punto en el espacio de características. A los puntos de datos nuevos (desconocidos) se les asigna la clase de prototipo más cercana a ellos. Para que “más cercano” tenga sentido, se debe definir una medida de distancia. Puede elegir cualquier métrica de distancia, por lo general, la distancia euclidiana es la medida de distancia elegida.
No hay limitación sobre cuántos prototipos se pueden usar por clase, el único requisito es que haya al menos 1 para cada clase. La siguiente imagen muestra un sistema LVQ simple donde cada clase (rojo y azul) está representada por un prototipo (los puntos más grandes).

1*mWCI2kCUWflGn O8Ct7CYg

Entonces, ¿cómo ajustamos los prototipos a cada clase para que sean una buena representación de esa clase? Comenzamos eligiendo una métrica de distancia, en este ejemplo aplicaremos la métrica de distancia euclidiana.

Recuerde que la distancia euclidiana entre 2 vectores en N dimensiones está dada por:

Observe que podemos usar la distancia euclidiana al cuadrado, que no requiere que calculemos la raíz cuadrada.

Entonces, ¿Cómo lo hacemos?

El primer paso es inicializar cada prototipo, normalmente los prototipos se inicializan utilizando los medios de la clase.

El siguiente paso es revisar el conjunto de datos, un vector de características a la vez. Para cada vector de características de este tipo, necesitamos calcular la distancia a cada prototipo utilizando la medida de distancia elegida. Luego, hacemos un paso de actualización solo al prototipo más cercano. Si el prototipo tiene la misma etiqueta que el vector de características, se empuja hacia el vector de características; de lo contrario, se aleja de él en la dirección opuesta. La magnitud del empuje está determinada por la tasa de aprendizaje, que es uno de los parámetros del algoritmo.

Una vez que hayamos hecho esto para cada muestra en nuestro conjunto de datos, podemos repetir este proceso varias veces, hasta que el algoritmo converja. Un barrido del conjunto de datos también se denomina época de entrenamiento. El algoritmo generalmente necesita algunas épocas para alcanzar la convergencia, dependiendo de la complejidad del problema.

El siguiente código es una implementación del algoritmo LVQ en Python.

Enséñame el código

No dude en experimentar con un conjunto de datos de su elección. También podría mejorar el algoritmo, por ejemplo, permitiendo que se usen múltiples prototipos por clase.

Ahora que tenemos el algoritmo abajo, probémoslo con algunos datos de muestra. En este caso utilicé el conjunto de datos de autenticación de billetes del repositorio de UCI Machine Learning.

Antes de ejecutar el algoritmo en el conjunto de datos de muestra, barajé los vectores de características y reservé el 10% del conjunto como conjunto de validación. Ahora, ¿qué debe hacer con el parámetro de tasa de aprendizaje? Idealmente, debería utilizar la validación cruzada para determinar el mejor valor. En este caso, simplemente elegí 0.01 como tasa de aprendizaje, ya que dio resultados decentes. Después de 25 épocas, el algoritmo convergió a un error de 0,28 en el conjunto de validación. Lo cual no es tan malo para un algoritmo que es tan intuitivo y simple.

Para clasificar un nuevo vector de características desconocidas, simplemente asígnele la clase del prototipo más cercano.

Bueno, gracias, ¿algo más?

LVQ tiene algunas ventajas claras: es simple, intuitivo y fácil de implementar y, al mismo tiempo, ofrece un rendimiento decente. Sin embargo, en problemas más complejos, la distancia euclidiana puede causar problemas si los datos tienen muchas dimensiones o son ruidosos. Es necesario una normalización y un procesamiento previo adecuados del espacio de características. Pero incluso entonces, si sus datos tienen muchas dimensiones, podría sufrir la maldición de la dimensionalidad y podría considerar alguna forma de reducción de la dimensionalidad.

¡Eso es todo amigos! La próxima vez, veremos variaciones más sofisticadas del algoritmo que tratan algunos de los problemas de LVQ.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

localizar comentarios youtube

Cómo ver los comentarios que hice en los videos de YouTube desde una PC

Suite E-Business | Oráculo