Why this matters for ML
Este módulo cierra el pilar juntando todo: dot products (01), bases (02), projections (06), eigenvectors (07), definiteness (08) y SVD (09) se combinan en dos algoritmos de ML de verdad — PCA (reducción de dimensión no supervisada) y least squares regression (el modelo predictivo más fundamental). Aquí tu álgebra lineal deja de ser abstracta.
Concepts covered
- Least squares regression via normal equations y via QR/SVD
- Covariance matrix desde datos
- PCA: derivación por eigenvectors de la covariance y por SVD
- Explained variance y elección de componentes
- Conexión projection ↔ regresión y eigenvectors ↔ direcciones principales
Intuition first
🎬 StatQuest "PCA step by step" (Josh Starmer) para el qué/por qué; luego relee LA-06 (projections) y LA-07/09 (eigen/SVD) para el cómo. MML cap. 9 (regresión) y cap. 10 (PCA).
Theory & key results
Least squares regression
Modelo: predecir con features ( ejemplos × features) y pesos . Como no hay ajuste exacto, minimizamos el error cuadrático . Solución (normal equations, LA-06): Interpretación: es la projection de sobre el column space de . En la práctica se resuelve con QR o SVD (más estable que invertir ); la pseudo-inversa (de la SVD) da incluso si es singular.
PCA (Principal Component Analysis)
Objetivo: encontrar las direcciones de máxima varianza de los datos y proyectar sobre las pocas más importantes (reducir dimensión perdiendo lo mínimo).
Receta:
- Centra los datos: (resta la media de cada feature).
- Covariance matrix: (simétrica, PSD → LA-08).
- Eigendecomposition de : los eigenvectors son los principal components (direcciones), y los eigenvalues son la varianza capturada por cada uno.
- Ordena por eigenvalue descendente; quédate con los top .
- Proyecta: , donde son los eigenvectors principales (esto es projection, LA-06).
Vía SVD (equivalente y preferida): haz SVD de ; las columnas de son los principal components y las varianzas. Es más estable numéricamente que formar .
Explained variance ratio: dice qué fracción de la varianza total captura el componente . Eliges para retener, p. ej., el 95%.
Worked example (PCA, mini)
Datos 2D muy correlacionados: puntos casi sobre la recta . La covariance tendrá un eigenvector con eigenvalue grande (mucha varianza a lo largo de la diagonal) y otro con eigenvalue chico. PCA con proyecta todo sobre la diagonal: pasas de 2D a 1D perdiendo casi nada. Ese es el corazón de la reducción de dimensión.
Notebook exercises (by hand)
- Deriva minimizando (usa LA-06 o cálculo).
- Con datos ajusta una recta por normal equations, a mano.
- Escribe la covariance matrix de (ya centrados).
- Explica por qué los principal components son ortogonales (pista: simétrica → LA-08).
- Si los eigenvalues de son , ¿qué % de varianza retienes con 2 componentes?
- Argumenta por qué se centran los datos antes de PCA.
Python lab
import numpy as np
# ---------- Least squares ----------
rng = np.random.default_rng(0)
X = np.c_[np.ones(50), rng.uniform(0, 10, 50)] # columna de 1s + feature
w_true = np.array([2.0, 0.5])
y = X @ w_true + rng.normal(0, 1, 50)
w_hat = np.linalg.lstsq(X, y, rcond=None)[0] # estable (QR/SVD internamente)
print("w estimado:", w_hat, " (verdadero ~", w_true, ")")
# ---------- PCA desde cero ----------
def pca(data, k):
Xc = data - data.mean(axis=0) # 1) centrar
U, s, Vt = np.linalg.svd(Xc, full_matrices=False) # 2) SVD
comps = Vt[:k] # principal components
var = (s**2) / (len(data) - 1)
ratio = var / var.sum()
Z = Xc @ comps.T # 3) proyectar
return Z, comps, ratio
# datos 2D correlacionados
base = rng.normal(size=(200, 1))
D = np.c_[base + 0.1*rng.normal(size=(200,1)),
base + 0.1*rng.normal(size=(200,1))]
Z, comps, ratio = pca(D, k=1)
print("explained variance ratio (comp 1):", ratio[0]) # ~0.98+
Compara tu pca con sklearn.decomposition.PCA si tienes sklearn (opcional): deben coincidir salvo signo.
Examen final 📝
Intenta cada nivel antes de abrir las soluciones.
🟡 Medio
- Ajusta una recta a por normal equations, a mano.
- Si los eigenvalues de la covariance matrix son , ¿qué fracción de varianza retienes con los 2 primeros componentes?
🟠 Medio-difícil
- Escribe la covariance matrix de los datos ya centrados y calcula sus principal components a mano.
- Explica por qué PCA da direcciones ortogonales y por qué los eigenvalues son siempre (conecta con LA-06/08).
🔴 Difícil
- Deriva PCA como un problema de optimización con restricción: maximizar la varianza sujeto a . Usa Lagrange multipliers (Calc-10) y muestra que la solución óptima es el eigenvector principal de .
- Muestra que hacer PCA vía eigendecomposition de es equivalente a hacer SVD de directamente, y explica por qué la ruta SVD es preferible numéricamente (relación con LA-06 ej. 6 y LA-09).
✅ Soluciones
- , . , . Resolviendo: , → , . (Recta .)
- → 81.25%.
- ; ⇒ . Eigenvalues iguales ⇒ cualquier dirección ortonormal es principal (datos isotrópicos, sin dirección preferida).
- es simétrica ⇒ spectral theorem (LA-08): eigenvectors ortogonales. es PSD (, forma ) ⇒ eigenvalues (= varianzas, no pueden ser negativas).
- Lagrangiano . : es eigenvector de con eigenvalue . La varianza en esa dirección es , máxima al elegir el mayor eigenvalue ⇒ eigenvector principal.
- , así que : eigenvectors de = columnas de (right singular vectors), eigenvalues = . La SVD evita formar (que eleva al cuadrado el condition number) ⇒ más estable.