Why this matters for ML
La SVD es probablemente la factorización más importante en toda la ciencia de datos: funciona para cualquier matriz (no solo cuadradas o simétricas), y es el motor de PCA, compresión de imágenes, sistemas de recomendación (matrix factorization), low-rank approximation y la pseudo-inversa para least squares mal condicionados. Si dominas SVD, dominas media caja de herramientas del ML clásico.
Concepts covered
- Singular Value Decomposition
- Singular values vs. eigenvalues
- Interpretación geométrica (rotar–escalar–rotar)
- Low-rank approximation (teorema de Eckart–Young)
- Relación SVD ↔ eigendecomposition de
- Panorama de otras factorizaciones: LU, QR, Cholesky
Intuition first
🎬 Busca "3Blue1Brown / Visual SVD" o Steve Brunton "SVD" (serie excelente y corta). Idea: toda transformación lineal = rotación, luego escalado por ejes, luego otra rotación.
Theory & key results
SVD: cualquier se factoriza como donde () y () son ortogonales, y () es diagonal con entradas , los singular values.
- Columnas de = right singular vectors (direcciones de entrada).
- Columnas de = left singular vectors (direcciones de salida).
- = cuánto se estira cada dirección.
Geometría: = rota con → escala ejes con → rota con . Una esfera unitaria se vuelve un elipsoide con semiejes .
Relación con eigen: los son los eigenvalues de (que es simétrica PSD, LA-08), y son sus eigenvectors; son los eigenvectors de . Por eso SVD "hereda" la limpieza del spectral theorem para matrices no simétricas.
Rank y estructura: el número de = rank de . Singular values chiquitos = direcciones de poca "energía" (a menudo ruido).
Low-rank approximation (Eckart–Young): la mejor aproximación de rank a (en norma de Frobenius/espectral) es quedarte con los mayores singular values: Esto es compresión: guardas tripletes en vez de toda la matriz. Base de compresión de imágenes y de la reducción de dimensión.
Otras factorizaciones (panorama):
- LU (): eliminación gaussiana empaquetada; para resolver sistemas rápido.
- QR (, LA-06): least squares estable.
- Cholesky (, para PD): la más eficiente; aparece en gaussianas y optimización.
Worked example
Idea numérica: para , → eigenvalues → singular values . ; son rotaciones/reflexiones que acomodan los signos. La esfera unidad se mapea a un elipsoide con semiejes 3 y 2.
Compresión intuitiva: una imagen (262k números) reconstruida con usa k números — ~5× menos, casi sin pérdida visible.
Notebook exercises (by hand)
- Para , halla singular values (ya es diagonal — cuidado con signos/orden).
- Muestra que los singular values de son las raíces de los eigenvalues de .
- Si es simétrica PD, ¿cómo se relacionan sus singular values con sus eigenvalues?
- Explica por qué descartar los pequeños "elimina ruido" y reduce dimensión.
- ¿Cuántos números guarda una aproximación rank- de una matriz ? Compara con .
- Relaciona SVD con PCA en una frase (adelanto de LA-10).
Python lab
import numpy as np
A = np.array([[3.,1.,1.],[-1.,3.,1.]])
U, s, Vt = np.linalg.svd(A, full_matrices=False)
print("singular values:", s)
# reconstrucción exacta
print("reconstruye A:", np.allclose(U @ np.diag(s) @ Vt, A))
# singular values^2 == eigenvalues de AᵀA
print(np.allclose(np.sort(s**2)[::-1],
np.sort(np.linalg.eigvalsh(A.T @ A))[::-1]))
# low-rank approximation
def low_rank(A, k):
U, s, Vt = np.linalg.svd(A, full_matrices=False)
return U[:, :k] @ np.diag(s[:k]) @ Vt[:k, :]
B = np.random.randn(30, 20)
for k in [1, 5, 10, 20]:
err = np.linalg.norm(B - low_rank(B, k)) / np.linalg.norm(B)
print(f"k={k:2d} error relativo={err:.3f}")
Reto: carga una imagen en escala de grises como matriz y compárala reconstruida con .
Examen final 📝
Intenta cada nivel antes de abrir las soluciones.
🟡 Medio
- Para : da sus singular values (¡ojo con el signo!).
- ¿Cuántos números guarda una aproximación rank- de una matriz ? Compara con guardar la matriz completa para .
🟠 Medio-difícil
- Muestra que los singular values de son las raíces cuadradas de los eigenvalues de , y que (right singular vectors) son los eigenvectors de .
- Si es simétrica positive definite, explica por qué su SVD y su eigendecomposition coinciden.
🔴 Difícil
- Deriva la pseudo-inversa desde la SVD y explica cómo resuelve least squares incluso cuando es singular (rango deficiente).
- Un sistema de recomendación tiene una matriz usuarios×ítems muy incompleta. Explica, usando la idea de low-rank approximation (Eckart–Young), por qué asumir "rank bajo" permite predecir ratings faltantes, y qué significa cada singular value grande en ese contexto.
✅ Soluciones
- Singular values son : (no ; el signo se absorbe en o ).
- Rank- guarda . Para : vs. ⇒ ~4.4× menos.
- . Es la eigendecomposition de : eigenvalues , eigenvectors columnas de .
- Si con , entonces ya tiene la forma con y (todos positivos). Cuando hay eigenvalues negativos, SVD toma y ajusta signos en .
- donde invierte los y deja 0 los ceros. da la solución de mínima norma de least squares; funciona con rank deficiente porque solo invierte las direcciones con (ignora el null space, en vez de fallar como ).
- Si los gustos reales dependen de pocos "factores latentes" (géneros, temas), la matriz completa es aprox. de rank bajo: . Ajustar esos factores a las entradas conocidas permite reconstruir (predecir) las faltantes. Cada grande = un factor latente que explica mucha varianza de los ratings.