Categorías
Universitario Videojuego

Reducción de dimensionalidad

Esta lección es importante porque no es raro acabar trabajando con espacios multidimensionales con un número tan alto de dimensiones que no es viable trabajar con él hasta que no lo reduzcamos.

El problema de la dimensionalidad

Lo que algunos llaman también la maldición de la dimensionalidad (curse of dimensionality) es un problema que presentan los espacios con muchas dimensiones (típicamente decenas, cientos o miles de dimensiones… aunque esto depende totalmente del problema al que nos enfrentemos). Resulta que conforme añadimos variables, el volumen del espacio crece exponencialmente y los datos se vuelven extremadamente dispersos (sparse).

¿Qué ocurre por lo tanto en la práctica? Que las distancias entre puntos pierden significado (todos los objetos parecen estar a la misma distancia), la complejidad computacional se dispara y los modelos de aprendizaje automático sobreajustan con facilidad. ¡Esta maldición afecta especialmente a los métodos que depende de distancias o vecindades, como los que veíamos en la lección anterior!

El objetivo de una reducción de dimensionalidad es siempre comprimir el espacio de entrada conservando la máxima información o estructura posible, pero eliminando redundancias, ruido y características que sean más «prescindibles» por estar altamente correlacionadas. Esto tiene mucho sentido hacerlo cuando por ejemplo usamos modelos predictivos en tiempo real y no queremos que el sistema tenga mucha latencia, o si trabajamos con sistemas que tienen demasiados grados de libertad (ej. trajes de captura de movimiento), o para poder trabajar visualmente con los datos (que necesariamente implica usar gráficas 2D o 3D).

Selección vs Extracción de características

La selección de características conserva un subconjunto de las variables originales desechando el resto (métodos Filter, Wrapper y Embedded). Esto mantiene la interpretabilidad directa de las variables.

Por el contrario, la extracción de características transforma y proyecta las variables originales hacia un nuevo espacio matemático de menor dimensión, creando combinaciones totalmente nuevas que tratan de capturar lo esencial de las originales.

Análisis de Componentes Principales

El Análisis de Componentes Principales (o PCA) utiliza proyección lineal: busca una combinación lineal de las características originales que maximice la varianza de los datos retenidos.

Vectores y Valores Propios (Eigenvectors & Eigenvalues): Los componentes principales son ortogonales (es decir, independientes) entre sí. El valor propio mide la cantidad de información (varianza) que captura cada componente.

Varianza Explicada Acumulada: Es un valor que nos dice cómo determinar cuántos componentes retener (ej. selecciona los necesarios para conservar el 95% de la varianza total).

En los perfiles de videojugadores de rol, por ejemplo, hay muchas características y por eso, por comodidad, es normal reducirlas a 2 ó 3 ejes interpretables como la agresividad, el interés por explorar, etc.

Técnicas no lineales

Cuando las relaciones entre los datos no son rectas o hiperplanos, sino estructuras curvadas complejas, se utilizan técnicas no lineales para su agrupamiento como las proyecciones de Manifold (Manifold Learning).

El método t-SNE (t-Distributed Stochastic Neighbor Embedding) conserva las relaciones de vecindad local. Es la mejor herramienta para la visualización en 2D/3D de agrupaciones complejas de datos, aunque no preserva las distancias globales ni sirve para transformar datos nuevos.

UMAP (Uniform Manifold Approximation and Projection), por su parte, es una Alternativa moderna más rápida que t-SNE. Lo cierto es que mantiene un mejor equilibrio entre la estructura local y la global, y escala mucho mejor con grandes volúmenes de datos.

Más información

Para complementar es recomendable consultar otros documentos.

  • Autoencoders, redes neuronales artificiales que aprenden a hacer esta tarea de reducción de dimensionalidad (tanto para comprimir o codificar, como para descomprimir o descodificar). Son muy utilizados en el Aprendizaje Profundo, una disciplina que veremos al final del curso.