Resumen

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.