Linear Algebra·Unidad 6

LA-06 — Orthogonality, projections, Gram–Schmidt

La regresión por mínimos cuadrados es literalmente una projection: proyectas el vector de observaciones sobre el column space de tus features, y el "error" es lo perpendicular. Las bases ortonormales hacen los cálculos estables y baratos (aparecen en QR, PCA, SVD). Este módulo es el puente directo a LA-10.

Why this matters for ML

La regresión por mínimos cuadrados es literalmente una projection: proyectas el vector de observaciones sobre el column space de tus features, y el "error" es lo perpendicular. Las bases ortonormales hacen los cálculos estables y baratos (aparecen en QR, PCA, SVD). Este módulo es el puente directo a LA-10.

Concepts covered

  • Ortogonalidad y conjuntos ortonormales
  • Orthogonal projection sobre una recta y sobre un subspace
  • Least squares como projection (intuición)
  • Gram–Schmidt (construir bases ortonormales)
  • Orthogonal matrices y la idea de QR

Intuition first

🎬 3Blue1Brown E.o.L.A. cap. 9 ("Dot products and duality"). Complementa con Strang 18.06 L15 (projections). Idea: la proyección es "la sombra" de un vector sobre un subespacio.

Theory & key results

Ortogonalidad: uvuv=0\mathbf{u}\perp\mathbf{v} \Leftrightarrow \mathbf{u}\cdot\mathbf{v}=0. Un conjunto es orthonormal si todos son ortogonales entre sí y de norma 1.

Projection sobre una recta (dirección u\mathbf{u}): la sombra de v\mathbf{v} sobre u\mathbf{u} es proju(v)=uvuuu.\text{proj}{\mathbf{u}}(\mathbf{v}) = \frac{\mathbf{u}\cdot\mathbf{v}}{\mathbf{u}\cdot\mathbf{u}},\mathbf{u}. El residuo vproju(v)\mathbf{v} - \text{proj}{\mathbf{u}}(\mathbf{v}) es u\perp \mathbf{u}.

Projection sobre el column space de AA: la matriz de proyección es P=A(AA)1A,b^=Pb.P = A(A^\top A)^{-1}A^\top,\qquad \hat{\mathbf{b}} = P\mathbf{b}. b^\hat{\mathbf{b}} es el punto del column space más cercano a b\mathbf{b}. Propiedades: P2=PP^2=P y P=PP^\top=P.

Least squares (por qué): cuando Ax=bA\mathbf{x}=\mathbf{b} no tiene solución exacta (más ecuaciones que incógnitas, datos ruidosos), buscas x^\hat{\mathbf{x}} que minimiza Axb2|A\mathbf{x}-\mathbf{b}|^2. La solución cumple las normal equations: AAx^=Ab.A^\top A,\hat{\mathbf{x}} = A^\top\mathbf{b}. Geométricamente: el error óptimo es perpendicular al column space (proyección). Esto es la regresión lineal (LA-10).

Gram–Schmidt: convierte una base cualquiera {v1,}{\mathbf{v}_1,\dots} en una ortonormal {q1,}{\mathbf{q}_1,\dots} restando a cada vector sus proyecciones sobre los anteriores y normalizando. Produce la QR decomposition A=QRA=QR (QQ ortonormal, RR triangular superior).

Orthogonal matrix QQ: columnas ortonormales, QQ=IQ^\top Q=I, así que Q1=QQ^{-1}=Q^\top (¡barato!). Preserva longitudes y ángulos (rota/refleja sin distorsionar). Con QR, las normal equations se resuelven de forma estable: Rx^=QbR\hat{\mathbf{x}}=Q^\top\mathbf{b}.

Worked example

Proyecta b=(2,3)\mathbf{b}=(2,3) sobre u=(1,0)\mathbf{u}=(1,0): proj=(1,0)(2,3)(1,0)(1,0)(1,0)=21(1,0)=(2,0)\text{proj} = \frac{(1,0)\cdot(2,3)}{(1,0)\cdot(1,0)}(1,0) = \frac{2}{1}(1,0) = (2,0). Residuo (0,3)(1,0)(0,3)\perp(1,0). ✓ (la sombra sobre el eje x es la componente x).

Notebook exercises (by hand)

  1. Proyecta (3,4)(3,4) sobre la recta dirección (1,1)(1,1); da la proyección y el residuo, y verifica que el residuo es perpendicular.
  2. Aplica Gram–Schmidt a {(1,1,0),(1,0,1)}{(1,1,0),(1,0,1)} para obtener dos vectores ortonormales.
  3. Verifica que si QQ tiene columnas ortonormales entonces Qx=x|Q\mathbf{x}|=|\mathbf{x}|.
  4. Deriva las normal equations AAx^=AbA^\top A\hat{\mathbf{x}}=A^\top\mathbf{b} imponiendo que el residuo bAx^\mathbf{b}-A\hat{\mathbf{x}} sea \perp a las columnas de AA.
  5. Comprueba P2=PP^2=P para P=A(AA)1AP=A(A^\top A)^{-1}A^\top con un AA de 22 columnas.
  6. Explica en una frase por qué least squares "no resuelve" el sistema, sino que encuentra lo más cercano.

Python lab

import numpy as np

def proj(u, v):
    return (u @ v) / (u @ u) * u

u = np.array([1.,1.]); v = np.array([3.,4.])
p = proj(u, v); r = v - p
print("proj:", p, " residuo:", r, " perp?", np.isclose(u @ r, 0))

# least squares vía normal equations vs. np.linalg.lstsq
A = np.array([[1.,1.],[1.,2.],[1.,3.]]); b = np.array([1.,2.,2.])
x_normal = np.linalg.solve(A.T @ A, A.T @ b)
x_lstsq, *_ = np.linalg.lstsq(A, b, rcond=None)
print("normal:", x_normal, " lstsq:", x_lstsq)   # coinciden

# QR
Q, R = np.linalg.qr(A)
print("Q^T Q ~ I:\n", np.round(Q.T @ Q, 6))

Reto: implementa Gram–Schmidt a mano y compara tu QQ con np.linalg.qr.

Examen final 📝

Intenta cada nivel antes de abrir las soluciones.

🟡 Medio

  1. Proyecta b=(4,2)\mathbf b=(4,2) sobre la dirección u=(1,1)\mathbf u=(1,1); da proyección y residuo, y confirma perpendicularidad.
  2. Verifica que {(1,0),(0,1)}{(1,0),(0,1)} y {(0.6,0.8),(0.8,0.6)}{(0.6,0.8),(-0.8,0.6)} son ambas bases ortonormales de R2\mathbb{R}^2.

🟠 Medio-difícil

  1. Aplica Gram–Schmidt a {(1,1,1),(1,1,0)}{(1,1,1),(1,1,0)} para obtener dos vectores ortonormales.
  2. Demuestra que la matriz de proyección P=A(AA)1AP=A(A^\top A)^{-1}A^\top cumple P2=PP^2=P y P=PP^\top=P, e interpreta ambas propiedades.

🔴 Difícil

  1. Deriva las normal equations AAx^=AbA^\top A\hat{\mathbf x}=A^\top\mathbf b de dos formas: (a) imponiendo que el residuo sea ⊥ a C(A)C(A), y (b) minimizando Axb2|A\mathbf x-\mathbf b|^2 con cálculo (Calc-09). Confirma que dan lo mismo.
  2. Explica por qué resolver least squares vía QR (A=QRRx^=QbA=QR\Rightarrow R\hat{\mathbf x}=Q^\top\mathbf b) es numéricamente más estable que formar y resolver AAx^=AbA^\top A\hat{\mathbf x}=A^\top\mathbf b (pista: condition number, κ(AA)=κ(A)2\kappa(A^\top A)=\kappa(A)^2).
✅ Soluciones
  1. proj=(1,1)(4,2)2(1,1)=62(1,1)=(3,3)\text{proj}=\frac{(1,1)\cdot(4,2)}{2}(1,1)=\frac{6}{2}(1,1)=(3,3). Residuo (1,1)(1,-1), y (1,1)(1,1)=0(1,1)\cdot(1,-1)=0. ✓
  2. En cada par: normas 1 y dot product 0. (Segundo: 0.6(0.8)+0.80.6=00.6\cdot(-0.8)+0.8\cdot0.6=0; normas 0.36+0.64=1\sqrt{0.36+0.64}=1.)
  3. q1=(1,1,1)/3\mathbf q_1=(1,1,1)/\sqrt3. v2projq1v2\mathbf v_2-\text{proj}_{\mathbf q_1}\mathbf v_2: proj=(1,1,1)(1,1,0)3(1,1,1)=23(1,1,1)\text{proj}=\frac{(1,1,1)\cdot(1,1,0)}{3}(1,1,1)=\frac{2}{3}(1,1,1); residuo (1/3,1/3,2/3)(1/3,1/3,-2/3), normalizado q2=(1,1,2)/6\mathbf q_2=(1,1,-2)/\sqrt6.
  4. P2=A(AA)1AA(AA)1A=A(AA)1A=PP^2=A(A^\top A)^{-1}A^\top A(A^\top A)^{-1}A^\top=A(A^\top A)^{-1}A^\top=P (proyectar dos veces = una vez). P=(A)((AA)1)A=PP^\top=(A^\top)^\top((A^\top A)^{-1})^\top A^\top=P ya que AAA^\top A es simétrica (proyección ortogonal).
  5. (a) A(bAx^)=0AAx^=AbA^\top(\mathbf b-A\hat{\mathbf x})=\mathbf 0\Rightarrow A^\top A\hat{\mathbf x}=A^\top\mathbf b. (b) xAxb2=2A(Axb)=0\nabla_{\mathbf x}|A\mathbf x-\mathbf b|^2=2A^\top(A\mathbf x-\mathbf b)=\mathbf 0\Rightarrow mismo sistema. ✓
  6. Formar AAA^\top A eleva al cuadrado el condition number (κ(AA)=κ(A)2\kappa(A^\top A)=\kappa(A)^2), amplificando errores de redondeo y perdiendo precisión cuando AA está mal condicionada. QR trabaja directamente sobre AA con QQ ortogonal (que no amplifica errores, κ(Q)=1\kappa(Q)=1), preservando κ(A)\kappa(A).