Saltar al contenido

Extracción de características del autocoder para la regresión

9 de diciembre de 2020

El autoencoder es un tipo de red neuronal que puede ser utilizado para aprender una representación comprimida de los datos en bruto.

Un autoencoder está compuesto por submodelos de codificador y decodificador. El codificador comprime la entrada y el decodificador intenta recrear la entrada a partir de la versión comprimida proporcionada por el codificador. Después de la formación, el modelo de codificador se guarda y el decodificador se descarta.

El codificador puede utilizarse entonces como técnica de preparación de datos para realizar la extracción de características en los datos en bruto que pueden utilizarse para entrenar un modelo diferente de aprendizaje de la máquina.

En este tutorial, descubrirá cómo desarrollar y evaluar un autoencoder para la predicción de la regresión

Después de completar este tutorial, lo sabrás:

  • Un autoencoder es un modelo de red neural que puede ser usado para aprender una representación comprimida de los datos en bruto.
  • Cómo entrenar un modelo de autoencoder en un conjunto de datos de entrenamiento y guardar sólo la parte de codificador del modelo.
  • Cómo usar el codificador como un paso de preparación de datos cuando se entrena un modelo de aprendizaje de una máquina.

Empecemos.

Extracción de características del autocoder para la regresión

Extracción de características del autocoder para la regresión
Foto de Simon Matzinger, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en tres partes; son:

  1. Autocodificadores para la extracción de características
  2. Autoencoder para la regresión
  3. Autoencoder como preparación de datos

Autocodificadores para la extracción de características

Un autoencoder es un modelo de red neural que busca aprender una representación comprimida de una entrada.

Un autoencoder es una red neural que está entrenada para intentar copiar su entrada a su salida.

– Página 502, Aprendizaje profundo, 2016.

Se trata de un método de aprendizaje no supervisado, aunque técnicamente se les entrena utilizando métodos de aprendizaje supervisados, denominados auto-supervisados. Por lo general, se les entrena como parte de un modelo más amplio que intenta recrear la entrada.

Por ejemplo:

El diseño del modelo de autoencoder lo hace difícil a propósito, restringiendo la arquitectura a un cuello de botella en el punto medio del modelo, a partir del cual se realiza la reconstrucción de los datos de entrada.

Hay muchos tipos de autocodificadores y su uso varía, pero quizás el uso más común es como modelo de extracción de características aprendidas o automáticas.

En este caso, una vez que el modelo se ajusta, el aspecto de la reconstrucción del modelo puede ser descartado y el modelo hasta el punto del cuello de botella puede ser utilizado. La salida del modelo en el cuello de botella es un vector de longitud fija que proporciona una representación comprimida de los datos de entrada.

Por lo general, están restringidos de manera que sólo pueden copiar aproximadamente, y copiar sólo la entrada que se asemeja a los datos de entrenamiento. Dado que el modelo se ve obligado a priorizar los aspectos de la entrada que deben ser copiados, a menudo aprende propiedades útiles de los datos.

– Página 502, Aprendizaje profundo, 2016.

Los datos de entrada del dominio pueden entonces proporcionarse al modelo y la salida del modelo en el cuello de botella puede utilizarse como un vector de características en un modelo de aprendizaje supervisado, para la visualización o, más en general, para la reducción de la dimensionalidad.

A continuación, exploremos cómo podríamos desarrollar un autocoder para la extracción de características en un problema de modelado predictivo de regresión.

Autoencoder para la regresión

En esta sección, desarrollaremos un autoencoder para aprender una representación comprimida de las características de entrada para un problema de modelado predictivo de regresión.

Primero, definamos un problema de modelado predictivo de regresión.

Utilizaremos la función scikit-learn de make_regression() para definir una tarea de regresión sintética con 100 características de entrada (columnas) y 1.000 ejemplos (filas). Es importante que definamos el problema de tal manera que la mayoría de las variables de entrada sean redundantes (90 del 100 o 90 por ciento), permitiendo que el autoencoder aprenda más tarde una representación comprimida útil.

El ejemplo que figura a continuación define el conjunto de datos y resume su forma.

Ejecutando el ejemplo se define el conjunto de datos y se imprime la forma de los conjuntos, confirmando el número de filas y columnas.

A continuación, desarrollaremos un modelo de autoencoder de Percepción Multicapa (MLP).

El modelo tomará todas las columnas de entrada, y luego producirá los mismos valores. Aprenderá a recrear el patrón de entrada exactamente.

El autoencoder consta de dos partes: el codificador y el decodificador. El codificador aprende a interpretar la entrada y a comprimirla en una representación interna definida por la capa del cuello de botella. El decodificador toma la salida del codificador (la capa de cuello de botella) e intenta recrear la entrada.

Una vez que el autoencoder es entrenado, la decodificación es descartada y sólo conservamos el codificador y lo usamos para comprimir los ejemplos de entrada a los vectores de salida por la capa de cuello de botella.

En este primer autocoder, no comprimiremos la entrada en absoluto y usaremos una capa de cuello de botella del mismo tamaño que la entrada. Esto debería ser un problema fácil que el modelo aprenderá casi a la perfección y tiene como objetivo confirmar que nuestro modelo se implementa correctamente.

Definiremos el modelo utilizando la API funcional. Si esto es nuevo para usted, le recomiendo este tutorial:

Antes de definir y ajustar el modelo, dividiremos los datos en trenes y conjuntos de pruebas y escalaremos los datos de entrada normalizando los valores al rango 0-1, una buena práctica con los MLP.

Definiremos el codificador para que tenga una capa oculta con el mismo número de nodos que hay en los datos de entrada con la normalización de los lotes y la activación de ReLU.

Recomendado:  Automatización aplicada: mayor productividad para los sistemas de seguimiento de solicitantes

A esto le sigue una capa de cuello de botella con el mismo número de nodos que las columnas de los datos de entrada, por ejemplo, sin compresión.

El decodificador se definirá con la misma estructura.

Tendrá una capa oculta con normalización de lotes y activación de ReLU. La capa de salida tendrá el mismo número de nodos que hay columnas en los datos de entrada y utilizará una función de activación lineal para emitir valores numéricos.

El modelo se ajustará utilizando la versión eficiente de Adam de descenso de gradiente estocástico y minimiza el error cuadrático medio, dado que la reconstrucción es un tipo de problema de regresión multi-salida.

Podemos trazar las capas en el modelo de auto-codificación para tener una idea de cómo los datos fluyen a través del modelo.

La imagen de abajo muestra un gráfico del autoencoder.

Esquema del modelo de autoencoder para la regresión

Esquema del modelo de autoencoder para la regresión

A continuación, podemos entrenar al modelo para reproducir la entrada y hacer un seguimiento del rendimiento del modelo en el conjunto de pruebas de retención. El modelo se entrena para 400 épocas y un tamaño de lote de 16 ejemplos.

Después del entrenamiento, podemos trazar las curvas de aprendizaje del tren y los juegos de prueba para confirmar que el modelo aprendió bien el problema de la reconstrucción.

Por último, podemos guardar el modelo de codificador para usarlo más tarde, si se desea.

Como parte de guardar el codificador, también trazaremos el modelo para tener una idea de la forma de la salida de la capa de cuello de botella, por ejemplo, un vector de 100 elementos.

A continuación se presenta un ejemplo de esta trama.

Esquema del modelo de codificador para la regresión sin compresión

Esquema del modelo de codificador para la regresión sin compresión

Uniendo todo esto, el ejemplo completo de un autoencoder para reconstruir los datos de entrada para un conjunto de datos de regresión sin ninguna compresión en la capa de cuello de botella se enumera a continuación.

Recomendado:  Previsión de la serie de tiempo con el profeta en Python

Ejecutando el ejemplo se ajusta al modelo e informa de la pérdida en el tren y los juegos de prueba a lo largo del camino.

Notasi tienes problemas para crear las tramas del modelo, puedes comentar la importación y llamar al plot_model() función.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, vemos que la pérdida es baja pero no llega a cero (como podíamos haber esperado) sin compresión en la capa del cuello de botella. Tal vez se requiera un mayor ajuste de la arquitectura del modelo o el aprendizaje de hiperparámetros.

Se crea un gráfico de las curvas de aprendizaje que muestra que el modelo logra un buen ajuste en la reconstrucción de la entrada, que se mantiene constante a lo largo del entrenamiento, no en exceso.

Curvas de aprendizaje del modelo de autoencoder para la regresión sin compresión

Curvas de aprendizaje del modelo de autoencoder para la regresión sin compresión

Hasta ahora, todo bien. Sabemos cómo desarrollar un autoencoder sin compresión.

El codificador entrenado se guarda en el archivo «codificador.h5«que podemos cargar y usar más tarde.

A continuación, exploremos cómo podríamos usar el modelo de codificador entrenado.

Autoencoder como preparación de datos

En esta sección, utilizaremos el modelo de codificador entrenado del modelo de autoencoder para comprimir los datos de entrada y entrenar un modelo predictivo diferente.

Primero, establezcamos una línea de base en el desempeño de este problema. Esto es importante, ya que si el rendimiento de un modelo no mejora con la codificación comprimida, entonces la codificación comprimida no añade valor al proyecto y no debe utilizarse.

Podemos entrenar un modelo de regresión del vector de apoyo (SVR) en el conjunto de datos de entrenamiento directamente y evaluar el rendimiento del modelo en el conjunto de pruebas de retención.

Como es una buena práctica, escalaremos tanto las variables de entrada como las de destino antes de ajustar y evaluar el modelo.

El ejemplo completo figura a continuación.

Al ejecutar el ejemplo se ajusta un modelo de SVR en el conjunto de datos de entrenamiento y se evalúa en el conjunto de pruebas.

Recomendado:  Modelos de Aprendizaje Profundo para la Regresión Multi-Salida

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver que el modelo alcanza un error absoluto medio (MAE) de alrededor de 89.

Esperamos y deseamos que un modelo SVR se ajuste a una versión codificada de la entrada para lograr un menor error para que la codificación se considere útil.

Podemos actualizar el ejemplo para codificar primero los datos utilizando el modelo de codificador entrenado en la sección anterior.

Primero, podemos cargar el modelo de codificador entrenado desde el archivo.

Podemos entonces utilizar el codificador para transformar los datos de entrada en bruto (por ejemplo, 100 columnas) en vectores de cuello de botella (por ejemplo, 100 vectores de elementos).

Este proceso puede aplicarse al tren y a los conjuntos de datos de prueba.

Podemos entonces usar estos datos codificados para entrenar y evaluar el modelo SVR, como antes.

A continuación se muestra el ejemplo completo.

Al ejecutar el ejemplo primero codifica el conjunto de datos utilizando el codificador, luego ajusta un modelo de SVR en el conjunto de datos de entrenamiento y lo evalúa en el conjunto de pruebas.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver que el modelo alcanza un MAE de alrededor de 69.

Este es un mejor MAE que el mismo modelo evaluado en el conjunto de datos en bruto, lo que sugiere que la codificación es útil para nuestro modelo elegido y el arnés de prueba.

Más lecturas

Esta sección proporciona más recursos sobre el tema si desea profundizar en él.

Tutoriales

Libros

APIs

Artículos

Resumen

En este tutorial, descubriste cómo desarrollar y evaluar un autoencoder para el modelado predictivo de regresión.

Específicamente, aprendiste:

  • Un autoencoder es un modelo de red neuronal que puede ser usado para aprender una representación comprimida de los datos en bruto.
  • Cómo entrenar un modelo de autoencoder en un conjunto de datos de entrenamiento y guardar sólo la parte de codificador del modelo.
  • Cómo usar el codificador como un paso de preparación de datos cuando se entrena un modelo de aprendizaje de una máquina.

¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.

Desarrollar proyectos de aprendizaje profundo con Python!

Aprendizaje profundo con Python

¿Qué pasaría si pudieras desarrollar una red en minutos

…con sólo unas pocas líneas de Python…

Descubre cómo en mi nuevo Ebook:
Aprendizaje profundo con Python

Cubre proyectos integrales en temas como:
Percepciones multicapas, Redes convolucionales y Redes neuronales recurrentesy más…

Por fin traer el aprendizaje profundo a
Sus propios proyectos

Sáltese los académicos. Sólo los resultados.

Ver lo que hay dentro