Matriz de covarianza y eigenvectores en PCA
Curso Avanzado de Álgebra Lineal y Machine Learning: PCA y SVD
Contenido del curso
Eigen-Análisis
Reducción de Dimensionalidad con PCA
Descomposición en Valores Singulares (SVD)
Matriz de covarianza y eigenvectores en PCA
Resumen
La matriz de covarianza es el resumen estadístico que revela la forma oculta de tus datos en machine learning. Aprenderás a interpretarla, calcular sus eigenvalores y eigenvectores con NumPy, y descubrir por qué es la base del análisis de componentes principales (PCA). Útil si trabajas con datos multivariados y quieres reducir dimensiones sin perder información.
Qué información contiene la matriz de covarianza
La matriz de covarianza es cuadrada y guarda dos tipos de información que cuentan cómo se comportan tus características [01:00].
En la diagonal principal encontrarás la varianza de cada característica, es decir, qué tan dispersos están sus valores respecto al promedio. Un número alto significa que los valores individuales tienden a alejarse de su media.
Fuera de la diagonal aparece la covarianza entre pares de características, y aquí está lo interesante:
- Covarianza positiva: si una crece, la otra también. Los datos forman una elipse que sube hacia la derecha.
- Covarianza negativa: si una crece, la otra decrece. La elipse baja hacia la derecha.
- Covarianza cercana a cero: no hay relación lineal. Los datos forman una nube circular.
¿Qué es la varianza en una matriz de covarianza? Es el valor en la diagonal principal que mide la dispersión de una característica respecto a su promedio. A mayor varianza, mayor dispersión de los datos.
Cómo calcular la matriz de covarianza con NumPy
En Google Colab, después de importar NumPy y Matplotlib, puedes construir una función que analice y grafique todo el proceso [03:30].
Por qué usar rowvar=False al calcular covarianza
La función np.cov(datos, rowvar=False) calcula la matriz de covarianza tomando las columnas como características. Por defecto, NumPy interpreta las filas como variables, pero en machine learning las columnas son las features, así que este parámetro es obligatorio.
Luego obtienes los eigenvalores y eigenvectores con np.linalg.eig(matriz_cov). Para que la visualización tenga sentido, conviene ordenar de mayor a menor usando np.argsort(eigenvalores)[::-1], ya que NumPy ordena por defecto de menor a mayor [05:30].
Por qué centrar los datos antes de graficar
Centrar los datos significa restarles su promedio con np.mean(datos, axis=0). Esto hace que la nube de puntos quede sobre el origen y los eigenvectores se vean alineados desde el (0,0). Es un paso visual, pero también conceptual: prepara el terreno para el análisis de componentes principales.
¿Por qué se usa la raíz cuadrada del eigenvalor para graficar? Porque los eigenvalores de la matriz de covarianza están elevados al cuadrado (son varianzas). Al sacarles raíz obtienes la desviación estándar, que sí representa una longitud real para dibujar la flecha del vector.
Qué nos dicen los eigenvectores sobre la forma de los datos
Al graficar tres escenarios con seis estudiantes y datos sintéticos, los resultados confirman la teoría [12:00].
Covarianza positiva: horas de estudio vs calificación
Con datos como (2 horas, 65), (3, 70), (5, 75), (6, 85), (8, 88) y (9, 94), la diagonal principal arroja varianzas de 7.5 para horas y 126.7 para calificaciones. La gran diferencia tiene sentido: las horas van de 2 a 9, mientras que las calificaciones van de 65 a 94.
Fuera de la diagonal aparece 30.3, un número grande y positivo. La elipse sube hacia la derecha y el eigenvector verde, el de mayor eigenvalor, marca la dirección de máxima información. El rojo solo captura ruido.
Covarianza negativa: horas de videojuegos vs calificación
Con datos como (10, 60), (8, 70), (7, 72), (5, 85), (3, 90) y (1, 95), las varianzas son 11.06 y 180.66. La covarianza fuera de la diagonal es un número negativo grande, porque cuando una variable sube la otra baja. La elipse cae hacia la derecha y el eigenvector principal sigue esa pendiente descendente.
Datos sin covarianza: ruido aleatorio
Generando 100 puntos con np.random.randn(100, 2) * np.array([10.0, 5.0]) y semilla 42, la covarianza fuera de la diagonal queda cercana a cero. La nube es circular (más ancha que alta) y los eigenvectores se alinean con los ejes X y Y, sin una dirección dominante.
Cómo se conecta esto con el análisis de componentes principales
Sin proponérnoslo del todo, hicimos PCA. La matriz de covarianza define la forma de los datos y sus eigenvectores localizan los ejes de máxima simetría [22:00].
La importancia de cada eje la mide su eigenvalor. Cuando un eje tiene un eigenvalor mucho mayor que el otro, PCA conserva solo ese eje y descarta el resto como ruido. Así puedes proyectar datos bidimensionales sobre una sola línea y reducir la dimensión sin perder información relevante.
¿Qué hace PCA con los eigenvectores? Los usa como nuevos ejes de coordenadas y conserva los que tienen mayor eigenvalor, descartando los de menor varianza. Esto reduce dimensiones manteniendo la información clave.
Ejercicio para practicar con covarianza y eigenvectores
Imagina dos características con fuerte covarianza positiva: años de experiencia y salario. Si la varianza del salario es mucho mayor que la de los años de experiencia, ¿la elipse será más vertical u horizontal? ¿Hacia dónde apuntará el eigenvector principal?
Comparte tu razonamiento en los comentarios.