Resumen

Aprende a visualizar, con claridad y sin rodeos, cómo la descomposición en valores singulares (SVD) describe la transformación de un espacio por una matriz. Verás el paso del círculo unitario a una elipse mediante rotaciones y escalamiento, y por qué esto conecta con capas de redes neuronales en tareas de clasificación.

¿Qué revela la SVD sobre una transformación lineal?

La SVD ofrece un mapa exacto de cómo una matriz A deforma el plano. Si transformas todos los puntos de un círculo unitario (radio 1, centrado en el origen), obtienes siempre una elipse. Esta deformación se entiende como tres pasos simples: rotación inicial V transpuesta, escalamiento Σ, rotación final U.

  • Cualquier matriz 2x2 transforma el círculo unitario en una elipse.
  • La rotación inicial V^T alinea los ejes que se van a estirar.
  • El escalamiento Σ estira o contrae según los valores singulares.
  • La rotación final U fija la orientación de la elipse.
  • Los ejes de la elipse son los vectores de U escalados por Σ.
  • En machine learning, cada capa de una red deforma el espacio para separar clases con mayor facilidad.

¿Cómo se implementa en código con NumPy y Matplotlib?

En Google Colab, tras importar NumPy y Matplotlib, se define una matriz A, se calcula su SVD y se visualiza la transformación del círculo unitario a una elipse.

¿Cómo crear el círculo unitario?

  • Genera ángulos con theta = np.linspace(0, 2*np.pi, 200).
  • Construye el círculo con np.cos y np.sin.
  • Usa un array 2xN: primera fila cosenos, segunda fila senos.
  • Verifica la forma con shape para confirmar dimensiones.

¿Cómo aplicar la SVD y la transformación A?

  • Define la matriz: A = [[2, 1], [1, 2]].
  • Descompón: U, S, VT = np.linalg.svd(A).
  • Transforma el círculo: ellipse = circle.T @ A.T.
  • Comprueba compatibilidad de dimensiones con las transpuestas.
A = np.array([[2, 1],
              [1, 2]])
U, S, VT = np.linalg.svd(A)

theta = np.linspace(0, 2*np.pi, 200)
circle = np.array([np.cos(theta), np.sin(theta)])

ellipse = circle.T @ A.T

¿Cómo graficar círculo y elipse?

  • Crea figura cuadrada: plt.figure(figsize=(8,8)).
  • Grafica el círculo con línea entrecortada gris y label claro.
  • Grafica la elipse en azul usando ellipse[:, 0] y ellipse[:, 1].
  • Ajusta límites: xlim(-4, 4) y ylim(-4, 4).
  • Añade título: interpretación geométrica de SVD.
  • Activa legend y grid para lectura limpia.

¿Cómo interpretar los valores singulares y los ejes de la elipse?

Los valores singulares determinan cuánto se estira cada dirección. Los vectores de U, escalados por S, marcan los ejes principales de la elipse y pueden graficarse como flechas desde el origen.

  • Eje 1: primera columna de U, escalada por el primer valor singular.
  • Eje 2: segunda columna de U, escalada por el segundo valor singular.
  • La flecha roja corresponde al mayor valor singular; en el ejemplo, se observa un valor de 3 y define la dirección de mayor estiramiento.
  • La flecha verde indica la segunda dirección, complementaria a la principal.
  • El color y el label ayudan a identificar cada elemento del gráfico.

Prueba: cambia un número de la matriz A (por ejemplo, reemplaza el 2 por 3 en la primera fila), vuelve a ejecutar y describe en una frase cómo cambió la elipse: ¿se estiró, se encogió, rotó? Comparte tu resultado en los comentarios. Próxima sesión: usarás SVD para descomponer una imagen y reconstruirla con solo una fracción de los datos.