Cómo SVD transforma círculo en elipse
Clase 10 de 12 • 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)
Comprende con confianza cómo la SVD explica la forma en que una matriz transforma el espacio: de un círculo unitario a una elipse, en tres pasos claros. Además, verás el código en Google Colab con NumPy y Matplotlib y una mini práctica para fijar la intuición.
¿Qué revela la SVD sobre la transformación de una matriz?
La SVD describe con precisión cómo una matriz A actúa sobre todos los vectores de norma uno: el círculo unitario se convierte en una elipse. Cualquier deformación compleja se resume en tres operaciones simples y ordenadas.
- Rotación inicial con V transpuesta: alinea el espacio con los ejes que se van a estirar.
- Escalamiento con sigma: estira o contrae según los valores singulares.
- Rotación final con U: orienta el resultado en su posición definitiva.
En términos prácticos, los valores singulares fijan cuánto se estira cada eje principal de la elipse, y las columnas de U marcan sus direcciones. En aprendizaje automático, esta idea es clave: cada capa de una red neuronal deforma el espacio para que las clases de una tarea de clasificación queden más separadas.
¿Cómo implementarlo paso a paso en código con NumPy y Matplotlib?
A partir de una matriz A = [[2, 1], [1, 2]], se calcula la SVD, se genera un círculo unitario con 200 puntos y se observa su transformación a elipse aplicando A. Luego, se grafican el círculo, la elipse y los ejes principales escalados por los valores singulares.
¿Cómo crear la matriz y calcular la SVD?
import numpy as np
import matplotlib.pyplot as plt
A = np.array([[2, 1],
[1, 2]])
U, S, VT = np.linalg.svd(A)
- Uso de NumPy para definir la matriz.
- Cálculo de SVD con
np.linalg.svd. - Matrices resultado: U, S (vector de valores singulares) y VT.
¿Cómo generar el círculo unitario y transformarlo en elipse?
# 200 puntos desde 0 hasta 2π
theta = np.linspace(0, 2*np.pi, 200)
# Círculo unitario como matriz 2 x 200
circle = np.array([np.cos(theta), np.sin(theta)])
# Transformación: elipse = circle.T @ A.T
ellipse = circle.T @ A.T
- Construcción del círculo con linspace, cos y sin.
- Verificación de compatibilidad de shape antes de multiplicar.
- Uso de la transpuesta para que las dimensiones coincidan.
¿Cómo graficar círculo, elipse y ejes singulares?
plt.figure(figsize=(8, 8))
# Círculo (gris, línea entrecortada)
plt.plot(circle[0, :], circle[1, :], '--', color='gray', label='círculo unitario')
# Elipse transformada (azul)
plt.plot(ellipse[:, 0], ellipse[:, 1], color='blue', label='elipse transformada por A')
# Ejes principales: columnas de U escaladas por S
axis1 = U[:, 0] * S[0]
axis2 = U[:, 1] * S[1]
# Flechas desde el origen con *quiver*
plt.quiver(0, 0, axis1[0], axis1[1], angles='xy', scale_units='xy', scale=1,
color='red', width=0.015, label=f'eje 1, σ₁ = {S[0]:.2f}')
plt.quiver(0, 0, axis2[0], axis2[1], angles='xy', scale_units='xy', scale=1,
color='green', width=0.015, label=f'eje 2, σ₂ = {S[1]:.2f}')
plt.xlim(-4, 4)
plt.ylim(-4, 4)
plt.title('Interpretación geométrica de SVD')
plt.legend()
plt.grid(True)
plt.show()
- Visualización con figure y plot para círculo y elipse.
- Ejes singulares con quiver desde el origen.
- Límites simétricos para apreciar escalamiento y rotación.
- En este ejemplo, el eje rojo es el más largo: σ₁ = 3; el segundo eje, más corto: σ₂ = 1.
¿Qué habilidades y keywords prácticas se refuerzan?
Este ejercicio combina álgebra lineal y visualización para entender SVD y su efecto geométrico. Se refuerzan habilidades de implementación y lectura de resultados en gráficos 2D.
- Intuición geométrica de SVD: rotación inicial (VT), escalamiento (Σ), rotación final (U).
- Valores singulares: magnitud del estiramiento por eje principal.
- Direcciones principales: columnas de U como ejes de la elipse.
- Círculo unitario y elipse: construcción con 200 puntos para trazos suaves.
- Manipulación con NumPy: array, transpuesta, multiplicación matricial, shape compatible.
- Gráfica con Matplotlib: plot, quiver, legend, grid, límites y title.
- Práctica guiada: modifica A cambiando un número (por ejemplo, 2 por 3 en la primera fila), reejecuta y describe en una frase si la elipse se estiró, se encogió o rotó.
¿Probaste la modificación de la matriz A y observaste el cambio en la elipse? Comparte tu frase y, si puedes, una captura del gráfico en los comentarios.