Saltar al contenido

6 Algoritmos de reducción de la dimensionalidad con Python

9 de julio de 2020

Reducción de la dimensionalidad es una técnica de aprendizaje no supervisada

No obstante, puede utilizarse como un paso de preprocesamiento de transformación de datos para los algoritmos de aprendizaje automático sobre clasificación y modelado predictivo de regresión de conjuntos de datos con algoritmos de aprendizaje supervisado.

Hay muchos algoritmos de reducción de la dimensionalidad para elegir y no hay un solo mejor algoritmo para todos los casos. En su lugar, es una buena idea explorar un rango de algoritmos de reducción de la dimensionalidad y diferentes configuraciones para cada algoritmo.

En este tutorial, descubrirá cómo ajustar y evaluar los algoritmos de reducción de la máxima dimensionalidad en Python.

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

  • La reducción de la dimensionalidad busca una representación de menor dimensión de los datos numéricos de entrada que preserve las relaciones salientes en los datos.
  • Hay muchos algoritmos diferentes de reducción de la dimensionalidad y no hay un único método mejor para todos los conjuntos de datos.
  • Cómo implementar, ajustar y evaluar la reducción de la dimensionalidad superior en Python con la biblioteca de aprendizaje de máquinas de ciencia-ficción.

Descubre la limpieza de datos, la selección de características, la transformación de datos, la reducción de la dimensionalidad y mucho más en mi nuevo libro, con 30 tutoriales paso a paso y el código fuente completo en Python.

Empecemos.

Algoritmos de reducción de la dimensionalidad con Python

Algoritmos de reducción de la dimensionalidad con Python
Foto de Bernard Spragg. NZ, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en tres partes; son:

  1. Reducción de la dimensionalidad
  2. Algoritmos de reducción de la dimensionalidad
  3. Ejemplos de reducción de la dimensionalidad
    1. Instalación de la biblioteca Scikit-Learn
    2. Conjunto de datos de clasificación
    3. Análisis de los componentes principales
    4. Descomposición del valor singular
    5. Análisis discriminante lineal
    6. Incrustación de Isomap
    7. Encajado localmente lineal
    8. Modificación de la incrustación lineal local

Reducción de la dimensionalidad

La reducción de la dimensionalidad se refiere a las técnicas para reducir el número de variables de entrada en los datos de capacitación.

Cuando se trata de datos de gran dimensión, suele ser útil reducir la dimensionalidad proyectando los datos a un subespacio de menor dimensión que capte la «esencia» de los datos. Esto se denomina reducción de la dimensionalidad.

– Página 11, Aprendizaje automático: Una Perspectiva Probabilística, 2012.

La alta dimensionalidad puede significar cientos, miles o incluso millones de variables de entrada.

Menos dimensiones de entrada a menudo significa, en consecuencia, menos parámetros o una estructura más simple en el modelo de aprendizaje de la máquina, lo que se denomina grados de libertad. Es probable que un modelo con demasiados grados de libertad se sobreponga al conjunto de datos de formación y que no funcione bien con los nuevos datos.

Es deseable tener modelos simples que generalizan bien y, a su vez, introducen datos con pocas variables de entrada. Esto es particularmente cierto para los modelos lineales, en los que el número de entradas y los grados de libertad del modelo suelen estar estrechamente relacionados.

La reducción de la dimensionalidad es una técnica de preparación de datos realizada sobre los datos antes de la modelización. Puede realizarse después de la limpieza y el escalado de los datos y antes de entrenar un modelo predictivo.

… la reducción de la dimensionalidad produce una representación más compacta y más fácilmente interpretable del concepto de objetivo, centrando la atención del usuario en las variables más relevantes.

– Página 289, Minería de datos: Herramientas y técnicas prácticas de aprendizaje de máquinas, 4ª edición, 2016.

Por ello, cualquier reducción de la dimensionalidad realizada en los datos de capacitación también debe realizarse en los nuevos datos, como un conjunto de datos de prueba, un conjunto de datos de validación y datos al hacer una predicción con el modelo final.

 

¿Quieres empezar a preparar los datos?

Toma mi curso intensivo gratuito de 7 días por correo electrónico ahora (con código de muestra).

Haga clic para inscribirse y también para obtener una versión gratuita del curso en formato PDF.

Descargue su minicurso GRATUITO

 

Algoritmos de reducción de la dimensionalidad

Hay muchos algoritmos que pueden ser usados para la reducción de la dimensionalidad.

Dos clases principales de métodos son los que se extraen del álgebra lineal y los que se extraen del aprendizaje múltiple.

Métodos de álgebra lineal

Los métodos de factorización matricial extraídos del campo del álgebra lineal pueden utilizarse para la dimensionalidad.

Para más información sobre la factorización de la matriz, véase el tutorial:

Algunos de los métodos más populares incluyen:

  • Análisis de los componentes principales
  • Descomposición del valor singular
  • Factorización de matriz no negativa

Múltiples métodos de aprendizaje

Los múltiples métodos de aprendizaje buscan una proyección de dimensiones inferiores de alta entrada dimensional que capte las propiedades salientes de los datos de entrada.

Algunos de los métodos más populares incluyen:

  • Incrustación de Isomap
  • Encajado localmente lineal
  • Escalado multidimensional
  • Incrustación espectral
  • t-distribuido Vecino estocástico de incrustación

Cada algoritmo ofrece un enfoque diferente para el desafío de descubrir las relaciones naturales en los datos de dimensiones inferiores.

No hay un mejor algoritmo de reducción de la dimensionalidad, y no hay una manera fácil de encontrar el mejor algoritmo para sus datos sin usar experimentos controlados.

En este tutorial, revisaremos cómo utilizar cada subconjunto de estos populares algoritmos de reducción de la dimensionalidad de la biblioteca scikit-learn.

Los ejemplos le servirán de base para copiar y pegar los ejemplos y probar los métodos con sus propios datos.

No nos sumergiremos en la teoría de cómo funcionan los algoritmos ni los compararemos directamente. Para un buen punto de partida sobre este tema, ver:

Vamos a sumergirnos.

Ejemplos de reducción de la dimensionalidad

En esta sección, revisaremos cómo usar los populares algoritmos de reducción de la dimensionalidad en el aprendizaje científico.

Esto incluye un ejemplo del uso de la técnica de reducción de la dimensionalidad como transformación de datos en una tubería de modelización y la evaluación de un ajuste del modelo en los datos.

Los ejemplos están diseñados para que usted copie y pegue en su propio proyecto y aplique los métodos a sus propios datos. Hay algunos algoritmos disponibles en la biblioteca de scikit-learn que no están demostrados porque no pueden ser utilizados como una transformación de datos directamente dada la naturaleza del algoritmo.

Como tal, utilizaremos un conjunto de datos de clasificación sintética en cada ejemplo.

Instalación de la biblioteca Scikit-Learn

Primero, instalemos la biblioteca.

No te saltes este paso ya que tendrás que asegurarte de que tienes la última versión instalada.

Puedes instalar la biblioteca de aprendizaje de ciencias usando el instalador de pip Python, como sigue:

Para instrucciones adicionales de instalación específicas para su plataforma, vea:

A continuación, confirmemos que la biblioteca está instalada y que está usando una versión moderna.

Ejecute el siguiente guión para imprimir el número de versión de la biblioteca.

Ejecutando el ejemplo, deberías ver el siguiente número de versión o superior.

Conjunto de datos de clasificación

Usaremos la función make_classification() para crear un conjunto de datos de clasificación binaria de prueba.

El conjunto de datos tendrá 1.000 ejemplos con 20 características de entrada, 10 de las cuales son informativas y 10 de las cuales son redundantes. Esto proporciona una oportunidad para que cada técnica identifique y elimine las características de entrada redundantes.

La semilla aleatoria fija para el generador de números pseudoaleatorios asegura que generemos el mismo conjunto de datos sintéticos cada vez que el código se ejecuta.

A continuación figura un ejemplo de creación y resumen del conjunto de datos de la clasificación sintética.

Ejecutando el ejemplo se crea el conjunto de datos y se informa del número de filas y columnas que coinciden con nuestras expectativas.

Es una tarea de clasificación binaria y evaluaremos un modelo de Regresión Logística después de cada transformación de reducción de la dimensionalidad.

El modelo se evaluará utilizando el patrón oro de la validación cruzada estratificada repetida 10 veces. Se informará de la precisión de la clasificación de la media y la desviación estándar en todos los pliegues y repeticiones.

En el ejemplo que figura a continuación se evalúa el modelo en el conjunto de datos en bruto como punto de comparación.

La ejecución del ejemplo evalúa la regresión logística en el conjunto de datos en bruto con las 20 columnas, logrando una precisión de clasificación de alrededor del 82,4 por ciento.

Una transformación exitosa de la reducción de la dimensionalidad en estos datos debería dar como resultado un modelo que tenga una mayor precisión que esta línea de base, aunque esto puede no ser posible con todas las técnicas.

Nota: no estamos tratando de «resolver» este conjunto de datos, sólo proporcionan ejemplos de trabajo que puede utilizar como punto de partida.

A continuación, podemos empezar a ver ejemplos de algoritmos de reducción de la dimensionalidad aplicados a este conjunto de datos.

He hecho algunos intentos mínimos para ajustar cada método al conjunto de datos. Cada método de reducción de dimensionalidad será configurado para reducir las 20 columnas de entrada a 10 cuando sea posible.

Utilizaremos un Pipeline para combinar la transformación y el modelo de datos en una unidad atómica que pueda ser evaluada utilizando el procedimiento de validación cruzada; por ejemplo:

Empecemos.

¿Puedes obtener un mejor resultado para uno de los algoritmos?
Hágamelo saber en los comentarios de abajo.

Análisis de los componentes principales

El Análisis de Componentes Principales, o PCA, podría ser la técnica más popular para la reducción de la dimensionalidad con datos densos (pocos valores cero).

Para más información sobre el funcionamiento de la PCA, vea el tutorial:

La biblioteca de aprendizaje científico proporciona la aplicación de la clase PCA de Análisis de Componentes Principales que puede utilizarse como una transformación de datos de reducción de la dimensionalidad. El «n_componentes«se puede configurar el número de dimensiones deseadas en la salida de la transformación.

El ejemplo completo de la evaluación de un modelo con reducción de la dimensionalidad del PCA se enumera a continuación.

Recomendado:  TPOT para el aprendizaje automático de la máquina en Python

Al ejecutar el ejemplo se evalúa la tubería de modelación con reducción de la dimensionalidad y un modelo predictivo de regresión logística.

En este caso, no vemos ningún aumento en el rendimiento del modelo al usar la transformación PCA.

Descomposición del valor singular

La Descomposición de Valor Singular, o SVD, es una de las técnicas más populares para la reducción de la dimensionalidad para datos escasos (datos con muchos valores cero).

Para más información sobre el funcionamiento de la SVD, vea el tutorial:

La biblioteca scikit-learn proporciona la implementación de la clase TruncatedSVD de Descomposición de Valor Singular que puede ser usada como una transformación de datos de reducción de dimensionalidad. La «n_componentes«se puede configurar el número de dimensiones deseadas en la salida de la transformación.

El ejemplo completo de la evaluación de un modelo con reducción de la dimensionalidad de la SVD se enumera a continuación.

Al ejecutar el ejemplo se evalúa la tubería de modelación con reducción de la dimensionalidad y un modelo predictivo de regresión logística.

En este caso, no vemos ningún aumento en el rendimiento del modelo al usar la transformación SVD.

Análisis discriminante lineal

El Análisis Discriminatorio Lineal, o LDA, es un algoritmo de clasificación multiclase que puede ser utilizado para la reducción de la dimensionalidad.

El número de dimensiones para la proyección se limita a 1 y C-1, donde C es el número de clases. En este caso, nuestro conjunto de datos es un problema de clasificación binaria (dos clases), limitando el número de dimensiones a 1.

Para más información sobre LDA para la reducción de la dimensionalidad, ver el tutorial:

La biblioteca scikit-learn proporciona la implementación de la clase LinearDiscriminantAnalysis de Linear Discriminant Analysis que puede utilizarse como una transformación de datos de reducción de dimensionalidad. El «n_componentes«se puede configurar el número de dimensiones deseadas en la salida de la transformación.

El ejemplo completo de evaluación de un modelo con reducción de la dimensionalidad de LDA se enumera a continuación.

Al ejecutar el ejemplo se evalúa la tubería de modelación con reducción de la dimensionalidad y un modelo predictivo de regresión logística.

En este caso, podemos ver un ligero aumento en el rendimiento en comparación con el ajuste de la línea de base en los datos en bruto.

Incrustación de Isomap

Isomap Embedding, o Isomap, crea una incrustación del conjunto de datos e intenta preservar las relaciones en el conjunto de datos.

La biblioteca de aprendizaje científico proporciona la implementación de la clase Isomap de Incrustación de Isomap que puede utilizarse como una transformación de datos de reducción de la dimensionalidad. El «n_componentes«se puede configurar el número de dimensiones deseadas en la salida de la transformación.

El ejemplo completo de la evaluación de un modelo con reducción de la dimensionalidad de la SVD se enumera a continuación.

Al ejecutar el ejemplo se evalúa la tubería de modelación con reducción de la dimensionalidad y un modelo predictivo de regresión logística.

En este caso, podemos ver un aumento en el rendimiento con la transformación de los datos del Isomap en comparación con el ajuste de la línea de base en los datos en bruto.

Encajado localmente lineal

La incrustación local lineal, o LLE, crea una incrustación del conjunto de datos e intenta preservar las relaciones entre los vecindarios en el conjunto de datos.

La biblioteca de scikit-learn proporciona la implementación de la clase LocallyLinearEmbedding de Locally Linear Embedding que puede utilizarse como una transformación de datos de reducción de la dimensionalidad. El «n_componentesEl argumento «puede ser configurado para configurar el número de dimensiones deseadas en la salida de la transformación

El ejemplo completo de la evaluación de un modelo con reducción de la dimensionalidad de LLE se enumera a continuación.

Al ejecutar el ejemplo se evalúa la tubería de modelación con reducción de la dimensionalidad y un modelo predictivo de regresión logística.

En este caso, podemos ver un aumento en el rendimiento con la transformación de los datos de LLE en comparación con el ajuste de la línea de base en los datos en bruto.

Modificación de la incrustación lineal local

Modified Locally Linear Embedding, o Modified LLE, es una extensión de Locally Linear Embedding que crea múltiples vectores de ponderación para cada barrio.

La biblioteca de scikit-learn proporciona la implementación de la clase LocallyLinearEmbedding de Modified Locally Linear Embedding que puede ser utilizada como una transformación de datos de reducción de dimensionalidad. El «método«El argumento debe ser puesto en «modificado» y el «n_componentes«El argumento «puede ser configurado para configurar el número de dimensiones deseadas en la salida de la transformación, que debe ser menor que eln_vecinos«argumento».

El ejemplo completo de la evaluación de un modelo con reducción de la dimensionalidad de LLE modificada se enumera a continuación.

Al ejecutar el ejemplo se evalúa la tubería de modelación con reducción de la dimensionalidad y un modelo predictivo de regresión logística.

En este caso, podemos ver un aumento en el rendimiento con la transformación de los datos modificados de LLE en comparación con el ajuste de la línea de base en los datos en bruto.