Aprende a implementar PCA desde cero con NumPy y valida tus resultados contra scikit-learn. En pocos pasos verás cómo estandarizar datos, calcular la matriz de covarianza, aplicar eigenanálisis y proyectar componentes principales. Además, comprobarás la equivalencia con la librería y visualizarás la reducción de 3D a 2D.
¿Qué es PCA y cómo implementarlo con NumPy?
PCA es un proceso de cuatro pasos: estandarización, covarianza, eigenanálisis y proyección. Aquí se construye una función que recibe la matriz de datos X y un número de componentes, y devuelve los datos proyectados en menor dimensión. Se trabaja en Google Colab, usando NumPy para el cálculo y comparando al final con scikit-learn.
¿Cómo estandarizar datos correctamente?
Centrar con media cero por columna: X − mean(X, axis=0).
Escalar dividiendo por la desviación estándar por columna: std(X, axis=0).
Resultado: un X estandarizado que evita que una variable domine por escala.
¿Cómo calcular la matriz de covarianza?
Usar np.cov sobre el X estandarizado considerando cada columna como característica.
Esta matriz describe la forma y orientación de los datos y prepara el terreno para el eigenanálisis.
¿Cómo obtener eigenvalores y proyectar componentes?
Calcular eigenvalores y eigenvectores con np.linalg.eig.
Ordenar de mayor a menor varianza con np.argsort sobre los eigenvalores en orden descendente.
Seleccionar las primeras n columnas de eigenvectores como componentes principales con slicing.
Proyectar con el producto matriz-matriz: X_estandarizado @ componentes_principales.
¿Cómo validar el PCA con scikit-learn y visualizar resultados?
Primero se prepara un conjunto 3D con np.column_stack(x, y, z) y se reduce a 2D con la función desde cero. Para la comparación justa con la librería, se estandarizan los datos con StandardScaler de scikit-learn antes de aplicar PCA(n_components=2) con fit_transform. Al imprimir solo las primeras cinco filas y redondear a dos decimales, los resultados coinciden prácticamente.
Usar StandardScaler para estandarizar antes de PCA de la librería.
Aplicar PCA con n_components=2 y comparar matrices proyectadas.
Redondear con dos decimales para una lectura clara.
Visualizar con matplotlib: dos subplots, dos scatter, alpha 0.7 y títulos.
Comprobar que ambas proyecciones en 2D “se ven exactamente igual”.
También se comenta una situación normal: puede haber diferencias de signo entre resultados. Esto es esperado porque un eigenvector define un eje; v y −v representan la misma dirección. Por eso, que un componente sea positivo en un caso y negativo en otro no significa error, siempre que los valores absolutos coincidan.
¿Qué habilidades, conceptos y keywords refuerzas aquí?
Estandarizar datos: centrar y escalar por desviación estándar por columna.
Desviación estándar: medida de dispersión usada en el escalado.
Matriz de covarianza: forma y orientación de los datos.
Eigenanálisis: eigenvalores y eigenvectores para hallar ejes de máxima varianza.
Componentes principales: columnas seleccionadas de eigenvectores ordenados.
Ordenamiento con np.argsort: selección descendente de varianza.
Slicing de matrices: [:, :n] para elegir n componentes.
Producto punto: proyección con X @ W.
StandardScaler y fit_transform: estandarización y proyección con scikit-learn.
Visualización con matplotlib: subplots, scatter, títulos y alpha.
Reducción de 3D a 2D: validación visual de PCA propio vs librería.
Ejercicio propuesto: crea una matriz con más de tres dimensiones, aplica el PCA desde cero y el de la librería, reduce a las dimensiones que quieras y comparte tus resultados en los comentarios. ¡Cuéntanos qué observaste y cómo te fue!