Linear Algebra·Unidad 10

LA-10 — Applications: PCA & least squares

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.

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 yXw\mathbf{y}\approx X\mathbf{w} con features XX (mm ejemplos × nn features) y pesos w\mathbf{w}. Como no hay ajuste exacto, minimizamos el error cuadrático Xwy2|X\mathbf{w}-\mathbf{y}|^2. Solución (normal equations, LA-06): w^=(XX)1Xy.\hat{\mathbf{w}} = (X^\top X)^{-1}X^\top\mathbf{y}. Interpretación: y^=Xw^\hat{\mathbf{y}}=X\hat{\mathbf{w}} es la projection de y\mathbf{y} sobre el column space de XX. En la práctica se resuelve con QR o SVD (más estable que invertir XXX^\top X); la pseudo-inversa X+=VΣ+UX^+ = V\Sigma^+U^\top (de la SVD) da w^=X+y\hat{\mathbf{w}}=X^+\mathbf{y} incluso si XXX^\top X 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:

  1. Centra los datos: X=Xxˉ\tilde{X}=X-\bar{\mathbf{x}}=Xxˉ (resta la media de cada feature).
  2. Covariance matrix: C=1m1XXC=\frac{1}{m-1}\tilde{X}^\top\tilde{X} (simétrica, PSD → LA-08).
  3. Eigendecomposition de CC: los eigenvectors son los principal components (direcciones), y los eigenvalues son la varianza capturada por cada uno.
  4. Ordena por eigenvalue descendente; quédate con los top kk.
  5. Proyecta: Z=XWkZ = \tilde{X},W_kWk, donde WkW_k son los kk eigenvectors principales (esto es projection, LA-06).

    Vía SVD (equivalente y preferida): haz SVD de X=UΣV\tilde{X}=U\Sigma V^\top=UΣV; las columnas de VV son los principal components y σi2/(m1)\sigma_i^2/(m-1) las varianzas. Es más estable numéricamente que formar CC.

    Explained variance ratio: λi/jλj\lambda_i/\sum_j\lambda_j dice qué fracción de la varianza total captura el componente ii. Eliges kk para retener, p. ej., el 95%.

    Worked example (PCA, mini)

    Datos 2D muy correlacionados: puntos casi sobre la recta y=xy=x. La covariance tendrá un eigenvector (1,1)/2\approx(1,1)/\sqrt2 con eigenvalue grande (mucha varianza a lo largo de la diagonal) y otro (1,1)/2\approx(1,-1)/\sqrt2 con eigenvalue chico. PCA con k=1k=1 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)

    1. Deriva w^=(XX)1Xy\hat{\mathbf{w}}=(X^\top X)^{-1}X^\top\mathbf{y} minimizando Xwy2|X\mathbf{w}-\mathbf{y}|^2 (usa LA-06 o cálculo).
    2. Con datos {(1,1),(2,2),(3,2)}{(1,1),(2,2),(3,2)} ajusta una recta y=w0+w1xy=w_0+w_1x por normal equations, a mano.
    3. Escribe la covariance matrix de {(2,0),(0,2),(2,0),(0,2)}{(2,0),(0,2),(-2,0),(0,-2)} (ya centrados).
    4. Explica por qué los principal components son ortogonales (pista: CC simétrica → LA-08).
    5. Si los eigenvalues de CC son {6,3,1}{6, 3, 1}, ¿qué % de varianza retienes con 2 componentes?
    6. 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

    1. Ajusta una recta y=w0+w1xy=w_0+w_1x a {(0,1),(1,3),(2,4)}{(0,1),(1,3),(2,4)} por normal equations, a mano.
    2. Si los eigenvalues de la covariance matrix son {8,5,2,1}{8, 5, 2, 1}, ¿qué fracción de varianza retienes con los 2 primeros componentes?

    🟠 Medio-difícil

    1. Escribe la covariance matrix de los datos ya centrados {(1,1),(1,1),(1,1),(1,1)}{(1,1),(-1,-1),(1,-1),(-1,1)} y calcula sus principal components a mano.
    2. Explica por qué PCA da direcciones ortogonales y por qué los eigenvalues son siempre 0\ge0 (conecta con LA-06/08).

    🔴 Difícil

    1. Deriva PCA como un problema de optimización con restricción: maximizar la varianza wCw\mathbf w^\top C\mathbf w sujeto a w=1|\mathbf w|=1. Usa Lagrange multipliers (Calc-10) y muestra que la solución óptima es el eigenvector principal de CC.
    2. Muestra que hacer PCA vía eigendecomposition de C=1m1XXC=\frac{1}{m-1}\tilde X^\top\tilde X es equivalente a hacer SVD de X\tilde X directamente, y explica por qué la ruta SVD es preferible numéricamente (relación con LA-06 ej. 6 y LA-09).
      ✅ Soluciones
      1. X=[101112]X=\begin{bmatrix}1&0\1&1\1&2\end{bmatrix}, y=(1,3,4)\mathbf y=(1,3,4). XX=[3335]X^\top X=\begin{bmatrix}3&3\3&5\end{bmatrix}, Xy=(8,11)X^\top\mathbf y=(8,11). Resolviendo: w1=1.5w_1=1.5, w0=8/331.5/...w_0=8/3-3\cdot1.5/...w0=7/61.17w_0=7/6\approx1.17, w1=1.5w_1=1.5. (Recta y1.17+1.5xy\approx1.17+1.5x.)
      2. (8+5)/(8+5+2+1)=13/16=0.8125(8+5)/(8+5+2+1)=13/16=0.8125 → 81.25%.
      3. C=13XXC=\frac{1}{3}\tilde X^\top\tilde X; XX=[4004]\tilde X^\top\tilde X=\begin{bmatrix}4&0\0&4\end{bmatrix}C=43IC=\frac{4}{3}I. Eigenvalues iguales ⇒ cualquier dirección ortonormal es principal (datos isotrópicos, sin dirección preferida).
      4. CC es simétrica ⇒ spectral theorem (LA-08): eigenvectors ortogonales. CC es PSD (C=1m1XXC=\frac{1}{m-1}\tilde X^\top\tilde X, forma MMM^\top M) ⇒ eigenvalues 0\ge0 (= varianzas, no pueden ser negativas).
      5. Lagrangiano L=wCwλ(ww1)\mathcal L=\mathbf w^\top C\mathbf w-\lambda(\mathbf w^\top\mathbf w-1). wL=2Cw2λw=0Cw=λw\nabla_{\mathbf w}\mathcal L=2C\mathbf w-2\lambda\mathbf w=0\Rightarrow C\mathbf w=\lambda\mathbf w: w\mathbf w es eigenvector de CC con eigenvalue λ\lambda. La varianza en esa dirección es wCw=λ\mathbf w^\top C\mathbf w=\lambda, máxima al elegir el mayor eigenvalue ⇒ eigenvector principal.
      6. X=UΣVXX=VΣ2V\tilde X=U\Sigma V^\top\Rightarrow \tilde X^\top\tilde X=V\Sigma^2V^\top=UΣVXX=VΣ2V, así que C=1m1VΣ2VC=\frac{1}{m-1}V\Sigma^2V^\top: eigenvectors de CC = columnas de VV (right singular vectors), eigenvalues = σi2/(m1)\sigma_i^2/(m-1). La SVD evita formar XX\tilde X^\top\tilde X (que eleva al cuadrado el condition number) ⇒ más estable.