Resumen

Reducir dimensiones sin perder información es clave en modelos de alto rendimiento. Aquí verás por qué la maldición de la dimensionalidad degrada resultados y cómo PCA, basado en eigenvectores de la matriz de covarianza, permite proyectar datos a menos dimensiones conservando la mayor varianza posible. Además, se muestra cómo implementarlo con Scikit-learn y analizar sus salidas para decisiones informadas.

¿Por qué más dimensiones empeoran el rendimiento en machine learning?

Añadir características no siempre ayuda. A partir de cierto punto, el desempeño cae por la maldición de la dimensionalidad.

  • Datos escasos: al aumentar dimensiones, los puntos se alejan exponencialmente y dejan de ser vecinos cercanos.
  • Las distancias pierden sentido: en espacios de miles de dimensiones, casi todas las distancias se parecen.
  • Impacto en modelos: empeora el vecino más cercano y métodos basados en distancia.
  • Efectos prácticos: modelos con overfitting, entrenamiento lento y pobre generalización.

¿Cómo funciona PCA y cuál es la conexión con el cambio de base?

PCA usa la estructura estadística de los datos para encontrar direcciones que capturan máxima varianza y reexpresar el conjunto en una base más informativa.

  • Matriz de covarianza: resume relaciones entre variables.
  • Eigenvectores y eigenvalores: los eigenvectores son direcciones de máxima varianza; los eigenvalores indican cuánta varianza captura cada dirección.
  • Cambio de base: PCA “rota” el sistema original (x, y, z) a los nuevos ejes llamados componentes principales.
  • Proyección: se calculan nuevas coordenadas de los puntos en la base de componentes principales.
  • Orden y recorte: se ordena por eigenvalor y se conservan los primeros componentes para reducir dimensiones manteniendo la mayor información.

¿Cómo aplicarlo en código con Scikit-learn y visualizar la varianza?

Se crean datos 3D, se aplica PCA a 2D y se evalúa la varianza explicada para cuantificar la información conservada.

import numpy as np from sklearn.decomposition import PCA # Datos sintéticos 3D np.random.seed(42) n = 300 x = np.random.randn(n) y = np.random.randn(n) z = 0.6*x + 0.2*y + np.random.randn(n) # combinación lineal + ruido X_3D = np.column_stack([x, y, z]) # PCA a 2 componentes pca = PCA(n_components=2) X_2D = pca.fit_transform(X_3D) # Varianza explicada por componente y total var_ratio = pca.explained_variance_ratio_ var_total = var_ratio.sum() print('Dimensiones originales:', X_3D.shape[1]) print('Nuevas dimensiones:', X_2D.shape[1]) print('Varianza explicada por componente:', np.round(var_ratio, 2)) print(f'Varianza total conservada con 2 componentes: {var_total:.2%}')
  • Varianza explicada: “varianza explicada por componente” corresponde al porcentaje capturado por cada principal component.
  • Resultado típico mostrado: se conservó más del 80 % de la información con solo dos componentes (ejemplo: 82.98 %).
  • Lectura técnica: explained_variance_ devuelve eigenvalores; components_ devuelve eigenvectores (componentes principales).

¿Qué nos dicen los eigenvalores y eigenvectores?

  • Un eigenvalor grande: componente que captura más varianza del conjunto.
  • Primer componente: dominado por X y Z, Y aporta poco por la construcción de z como combinación de x e y más ruido.
  • Segundo componente: dominado por Y, capturando la variación remanente principal.
  • Interpretación: los componentes se alinean con las direcciones donde realmente “vive” la información.

¿Para qué sirve en práctica: visualización, eficiencia y ruido?

  • Visualización: proyectar a 2D o 3D permite ver estructura y posibles clusters.
  • Eficiencia: menos características aceleran el entrenamiento y simplifican modelos.
  • Eliminación de ruido: descartar componentes de baja varianza reduce información irrelevante y mejora la generalización.

¿Qué ejercicio ayuda a afianzar el entendimiento?

  • Cambia n_components de 2 a 1.
  • Ejecuta de nuevo e interpreta el porcentaje de varianza total conservada.
  • Comenta tu resultado: ¿perder dos dimensiones y aún conservar alto porcentaje te parece adecuado para tu caso?.

Comparte tus hallazgos y el porcentaje de varianza que obtuviste al usar un solo componente: ¿en qué escenarios lo usarías y por qué?.