Reducción de dimensiones con PCA en Python

Resumen

Cuando trabajas con modelos de machine learning, sumar más características parece una buena idea. Más datos, más información, mejor predicción. Pero el análisis de componentes principales (PCA) existe justamente porque esa intuición falla: a partir de cierto punto, añadir dimensiones empeora el rendimiento. Aquí entenderás por qué ocurre y cómo PCA lo resuelve con un ejemplo en Python.

Por qué más dimensiones empeoran tu modelo

Este fenómeno se llama maldición de la dimensionalidad y se nota en dos efectos concretos que afectan a cualquier algoritmo que dependa de distancias entre puntos.

Imagina 10 puntos en una línea. Están cerca. Mete esos mismos 10 puntos en un cuadrado y luego en un cubo. Con cada dimensión que añades, la distancia promedio entre puntos crece exponencialmente. Tus datos se vuelven solitarios y al modelo le cuesta encontrar patrones porque ya no hay vecinos cercanos reales.

El segundo efecto es aún más raro: en espacios de miles de dimensiones, la distancia entre cualquier par de puntos tiende a ser casi la misma. Si todas las distancias son iguales, la idea de vecino más cercano se rompe, y con ella muchos algoritmos clásicos.

¿Qué es la maldición de la dimensionalidad? Es el deterioro del rendimiento de los modelos cuando aumentan las características: los datos se vuelven escasos y las distancias entre puntos pierden significado.

El resultado práctico es que los modelos hacen overfitting, tardan más en entrenar y generalizan peor. Por eso necesitas reducir dimensiones, pero sin tirar características al azar.

Cómo funciona PCA y por qué es un cambio de base

PCA usa los eigenvectores de la matriz de covarianza, esos mismos que ya sabes calcular [01:08]. Esos vectores apuntan a las direcciones de máxima varianza, y cuando se usan dentro de PCA reciben el nombre de componentes principales.

La idea conecta directo con el concepto de cambio de base del álgebra lineal. PCA no solo encuentra ejes nuevos: rota tu sistema de coordenadas estándar (X, Y, Z) hacia esos componentes principales. Al proyectar tus datos, simplemente estás calculando sus coordenadas en un sistema de ejes más eficiente.

El proceso tiene tres pasos claros:

  • Calcular todos los componentes principales como eigenvectores de la matriz de covarianza.
  • Ordenarlos por importancia usando sus eigenvalores: a mayor valor, más varianza captura ese componente.
  • Quedarte solo con los primeros y descartar el resto.

Así proyectas los datos a un espacio menor conservando casi toda la información útil.

Cómo aplicar PCA en Python con scikit-learn

El ejemplo parte de 300 puntos generados aleatoriamente en tres dimensiones, donde la coordenada Z es una combinación lineal de X e Y más algo de ruido [03:20]. Esto se hace a propósito: queremos que la información real viva en dos dimensiones aunque los datos parezcan tridimensionales.

Preparar los datos en una matriz

Primero apilas los vectores X, Y y Z en una matriz con np.column_stack, lo que produce una matriz de 300 filas y 3 columnas.

python import numpy as np import matplotlib.pyplot as plt from sklearn.decomposition import PCA

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)

datos_3d = np.column_stack((x, y, z))

Aplicar PCA y leer la varianza explicada

Con PCA(n_components=2) indicas a cuántas dimensiones quieres proyectar. El método fit_transform hace todo el trabajo: calcula los componentes principales y devuelve los datos en el nuevo espacio [05:45].

python pca = PCA(n_components=2) datos_2d = pca.fit_transform(datos_3d)

varianza_explicada = pca.explained_variance_ratio_ varianza_total = varianza_explicada.sum()

En este caso, el primer componente captura cerca del 53% de la información y el segundo alrededor del 30%. Entre los dos conservan casi el 83% de la varianza total. El tercer componente, que era ruido, se descarta sin perder casi nada.

¿Qué es la varianza explicada en PCA? Es el porcentaje de información original que captura cada componente principal. Si los dos primeros suman 83%, conservas esa proporción de la estructura de los datos al reducir dimensiones.

Inspeccionar eigenvalores y eigenvectores

Puedes acceder a los valores reales con pca.explained_variance_ y a los vectores con pca.components_ [07:30]. Al imprimirlos verás algo revelador: el primer componente principal tiene valores grandes en los ejes X y Z, casi nulos en Y. Tiene sentido, porque Z fue construida como combinación lineal de X. El segundo componente, en cambio, está dominado por Y.

Qué te aporta reducir dimensiones con PCA

Al visualizar los datos originales en 3D y la proyección en 2D, los puntos forman una especie de panqueque dentro del cubo. PCA lo voltea para que veas su cara plana, conservando la estructura real [11:20]. Los eigenvectores graficados sobre la proyección casi se alinean con los ejes X e Y, confirmando dónde estaba la información.

Reducir dimensiones con PCA te sirve para tres cosas concretas:

  • Visualización: nadie puede ver datos en 10 o 100 dimensiones, pero sí en 2 o 3.
  • Eficiencia: entrenar con 2 características es muchísimo más rápido que con 100.
  • Eliminación de ruido: al descartar los componentes de menor varianza, quitas la parte menos informativa y obtienes modelos más robustos.

Ahora prueba algo: cambia n_components=2 por n_components=1, vuelve a ejecutar y comparte en los comentarios qué porcentaje de varianza total conservas. ¿Crees que pasar de 3 a 1 dimensión sigue siendo un buen trato?