Ir al contenido

LDA y QDA (análisis discriminante gaussiano)

En simple: lee esto primero

LDA y QDA describen cada clase como una «nube» de puntos con forma de campana y asignan cada punto nuevo a la nube que mejor lo explique.

Imagínalo así

Imagina dos manchas de tinta en un papel. Para un punto nuevo, preguntas: ¿cae más «adentro» de la mancha azul o de la roja? LDA asume que ambas manchas tienen la misma forma; QDA deja que cada una tenga la suya.

Lo que tienes que llevarte
  • LDA: misma forma de nube para todas las clases → frontera recta.
  • QDA: cada clase con su forma → frontera curva (más flexible, necesita más datos).
  • La distancia de Mahalanobis es una distancia «inteligente» que tiene en cuenta la forma de la nube.
Palabras raras de esta página
covarianza
cómo varían juntas dos variables (si una sube, ¿la otra también?). Define la forma de la nube.
gaussiana multivariada
la campana en varias dimensiones: una nube ovalada.
discriminante
el puntaje que dice qué tan bien encaja el punto en cada clase.

Más abajo viene la versión completa, con fórmulas. Si una palabra aparece subrayada con puntos, pasa el mouse (o tócala) para ver qué significa.

Features correlacionadas necesitan covarianza

Sección titulada «Features correlacionadas necesitan covarianza»

La matriz de covarianza Σ\Sigma da forma a la gaussiana. En 2-D, Σ=[σ12σ12σ12σ22]\Sigma = \begin{bmatrix}\sigma_1^2 & \sigma_{12}\\ \sigma_{12} & \sigma_2^2\end{bmatrix}: la diagonal es la dispersión de cada feature; el término fuera de la diagonal, cuánto se mueven juntas.

Σ\SigmaFormaModelo
I\mathbf{I} (esférica)círculo—
diagonalelipse alineada a los ejesNaive Bayes
completa (σ12≠0\sigma_{12}\ne0)elipse inclinadaLDA / QDA

Leer el exponente: la distancia de Mahalanobis

Sección titulada «Leer el exponente: la distancia de Mahalanobis»

Una gaussiana puntúa un punto con un número en su exponente. En 1-D es el z-score al cuadrado, D2=(x−μσ)2D^2 = \big(\frac{x-\mu}{\sigma}\big)^2: «¿a cuántas σ del centro?». En varias dimensiones, «dividir por σ» se vuelve multiplicar por Σ−1\Sigma^{-1}, que rota a los ejes de la elipse y divide por la dispersión en cada uno:

D2(x)=(x−μ)⊤Σ−1(x−μ),N(x;μ,Σ)=1(2π)d/2∣Σ∣1/2e−12D2(x)D^2(\mathbf{x}) = (\mathbf{x}-\boldsymbol\mu)^\top\Sigma^{-1}(\mathbf{x}-\boldsymbol\mu),\qquad \mathcal N(\mathbf{x};\boldsymbol\mu,\Sigma) = \frac{1}{(2\pi)^{d/2}|\Sigma|^{1/2}}e^{-\frac12 D^2(\mathbf{x})}

La densidad depende de x\mathbf{x} solo por D2D^2: sus curvas de nivel son las elipses. Dos puntos a la misma distancia euclidiana del centro pueden estar a distinta distancia de Mahalanobis: un paso a lo largo del eje ancho (alta varianza) es «normal» y cuesta menos (D=1.0D=1.0) que el mismo paso a través del eje angosto (D≈2.1D\approx2.1). Mahalanobis = euclidiana medida en las unidades de la propia elipse.

p(x∣y=k)=N(x;μk,Σk)p(\mathbf{x}\mid y=k) = \mathcal N(\mathbf{x};\boldsymbol\mu_k,\Sigma_k), πk=Nk/N\pi_k = N_k/N. La MLE es otra vez contar y promediar:

μk=1Nk∑i:yi=kxi,Σk=1Nk∑i:yi=k(xi−μk)(xi−μk)⊤\boldsymbol\mu_k = \frac{1}{N_k}\sum_{i:y_i=k}\mathbf{x}_i,\qquad \Sigma_k = \frac1{N_k}\sum_{i:y_i=k}(\mathbf{x}_i-\boldsymbol\mu_k)(\mathbf{x}_i-\boldsymbol\mu_k)^\top

Dos maneras de usar la dispersión:

  • QDA: cada clase conserva su propia Σk\Sigma_k (su propia elipse).
  • LDA: todas comparten una Σ\Sigma agrupada (pooled), el promedio ponderado Σ=∑kNkNΣk\Sigma = \sum_k \frac{N_k}{N}\Sigma_k (misma elipse, solo se mueve el centro).

El discriminante: un score gaussiano por clase

Sección titulada «El discriminante: un score gaussiano por clase»

δk(x)=log⁡(prior×likelihood)\delta_k(\mathbf{x}) = \log(\text{prior}\times\text{likelihood}) sin la constante común:

δk(x)=log⁡πk⏟ventaja inicial−12(x−μk)⊤Σk−1(x−μk)⏟Mahalanobis al centro−12log⁡∣Σk∣⏟castigo por elipse holgada\delta_k(\mathbf{x}) = \underbrace{\log\pi_k}_{\text{ventaja inicial}} - \underbrace{\tfrac12(\mathbf{x}-\boldsymbol\mu_k)^\top\Sigma_k^{-1}(\mathbf{x}-\boldsymbol\mu_k)}_{\text{Mahalanobis al centro}} - \underbrace{\tfrac12\log|\Sigma_k|}_{\text{castigo por elipse holgada}}

Se lee: una ventaja por ser clase común, menos qué tan lejos está x\mathbf{x} del centro en unidades de la elipse, menos un castigo por una elipse grande y floja. Expandiendo el término del medio:

(x−μk)⊤Σk−1(x−μk)=x⊤Σk−1x⏟cuadraˊtico en x−2μk⊤Σk−1x+μk⊤Σk−1μk(\mathbf{x}-\boldsymbol\mu_k)^\top\Sigma_k^{-1}(\mathbf{x}-\boldsymbol\mu_k) = \underbrace{\mathbf{x}^\top\Sigma_k^{-1}\mathbf{x}}_{\text{cuadrático en }\mathbf{x}} - 2\boldsymbol\mu_k^\top\Sigma_k^{-1}\mathbf{x} + \boldsymbol\mu_k^\top\Sigma_k^{-1}\boldsymbol\mu_k
  • QDA (Σk\Sigma_k propias): el término x⊤Σk−1x\mathbf{x}^\top\Sigma_k^{-1}\mathbf{x} sobrevive en δ1−δ0\delta_1-\delta_0 ⇒ frontera cuadrática x⊤Ax+w⊤x+b=0\mathbf{x}^\top\mathbf{A}\mathbf{x}+\mathbf{w}^\top\mathbf{x}+b=0 (puede envolver a la clase más compacta).
  • LDA (Σ\Sigma compartida): x⊤Σ−1x\mathbf{x}^\top\Sigma^{-1}\mathbf{x} y log⁡∣Σ∣\log|\Sigma| son idénticos en todas las clases y se cancelan. Cada score queda lineal, δk=wk⊤x+bk\delta_k = \mathbf{w}_k^\top\mathbf{x}+b_k con wk=Σ−1μk\mathbf{w}_k=\Sigma^{-1}\boldsymbol\mu_k, y la frontera es
w⊤x+b=0,w=Σ−1(μ1−μ0),b=−12(μ1+μ0)⊤Σ−1(μ1−μ0)+log⁡π1π0\mathbf{w}^\top\mathbf{x}+b=0,\qquad \mathbf{w}=\Sigma^{-1}(\boldsymbol\mu_1-\boldsymbol\mu_0),\qquad b = -\tfrac12(\boldsymbol\mu_1+\boldsymbol\mu_0)^\top\Sigma^{-1}(\boldsymbol\mu_1-\boldsymbol\mu_0)+\log\frac{\pi_1}{\pi_0}

Medias μ0=2\mu_0=2, μ1=6\mu_1=6, varianza compartida σ2\sigma^2. Especializando:

w=μ1−μ0σ2,x∗=μ0+μ12−σ2μ1−μ0log⁡π1π0w = \frac{\mu_1-\mu_0}{\sigma^2},\qquad x^* = \frac{\mu_0+\mu_1}{2} - \frac{\sigma^2}{\mu_1-\mu_0}\log\frac{\pi_1}{\pi_0}
  • Priors iguales: el log es 0 ⇒ x∗=4x^* = 4, el punto medio («gana la media más cercana»).
  • Con σ2=4\sigma^2 = 4: w=1w = 1, b=−4b=-4 ⇒ P(y=1∣x)=σ(x−4)P(y=1\mid x)=\sigma(x-4).
  • Priors distintos: el término del log desliza x∗x^* hacia la clase más rara, achicando su territorio.

En más dimensiones, w=Σ−1(μ1−μ0)\mathbf{w}=\Sigma^{-1}(\boldsymbol\mu_1-\boldsymbol\mu_0) es la flecha entre las medias (reescalada por la dispersión compartida) y la frontera es su bisectriz perpendicular (en la métrica de Σ\Sigma).

LDA a mano en 1-D

Dos clases gaussianas con la misma varianza σ². Arriba: cada densidad multiplicada por su prior (el área sombreada donde se traslapan es el error de Bayes). Abajo: el posterior que sale de Bayes, que es exactamente una sigmoide.

-2.502.557.510x-2.502.557.51000.51xP(y=1 | x)
π₀·p(x | y=0)π₁·p(x | y=1)traslape = error de Bayesfrontera x* y posterior σ(wx + b)
w=μ1−μ0σ2=6.0−2.04.0=1.000,x∗=μ0+μ12−σ2μ1−μ0log⁡π1π0=4.00−1.00⋅(0.00)=4.000w = \frac{\mu_1-\mu_0}{\sigma^2} = \frac{6.0-2.0}{4.0} = 1.000,\qquad x^* = \frac{\mu_0+\mu_1}{2} - \frac{\sigma^2}{\mu_1-\mu_0}\log\frac{\pi_1}{\pi_0} = 4.00 - 1.00\cdot(0.00) = 4.000
w1.000
b-4.000
frontera x*4.000
Con priors iguales, x* es el punto medio (gana la media más cercana). Baja π₁: la frontera se corre hacia μ₁ y la clase rara pierde territorio, porque se necesita más evidencia para apostar por ella. Sube σ²: la sigmoide se aplana (más incertidumbre) y el prior pesa más. Si μ₀ = μ₁, w = 0 y solo decide el prior.

Mezcla cada covarianza entre la agrupada y la propia: Σk(t)=(1−t)Σpooled+t Σk\Sigma_k(t) = (1-t)\Sigma_\text{pooled}+t\,\Sigma_k. Con t=0t=0 es LDA (recta); con t=1t=1, QDA (curva). La frontera se dobla exactamente tanto como difieran las formas/inclinaciones de las elipses.

Costo: LDA ajusta una Σ; QDA una por clase (d(d+1)/2d(d+1)/2 números cada una: 3 en 2-D, 465 con d=30d=30). Más perillas = más varianza = necesita más datos (sesgo–varianza otra vez). Con dd grande, QDA necesita regularización.

LDA y la logística llegan a la misma σ(w⊤x+b)\sigma(\mathbf{w}^\top\mathbf{x}+b) por caminos distintos, y eso cambia su comportamiento según cuántos datos haya (Ng y Jordan, 2001): el generativo aprende más rápido (baja complejidad muestral) y se estanca un poco más arriba; el discriminativo necesita más datos pero termina más abajo.

¿Pocos datos o muchos? Generativo vs discriminativo

Se entrenan Naive Bayes gaussiano (varianza por feature compartida entre clases) y regresión logística casi sin regularizar con n ejemplos (promedio de 12 repeticiones) y se mide el error en 1000 puntos de test. Todo se calcula en tu navegador.

00.10.20.30.40.5ejemplos de entrenamiento n (escala logarítmica)error de test
Naive Bayes (generativo)regresión logística (discriminativa)
30 features débiles e independientes (el supuesto de NB es cierto). NB solo estima una media por clase y una varianza por feature, así que aprende mucho más rápido: con ~64 ejemplos ya está donde la logística llega recién con ~256. La logística tiene que aprender 31 pesos con poca regularización y con pocos datos sobreajusta (con n < d las clases son separables).
Generativo (NB, LDA, QDA)Discriminativo (logística)
aprende con pocos ejemplosmenos supuestos: solo la frontera
puede generar datos, imputar, detectar outlierssuele ser más preciso con muchos datos
agregar una clase es baratogana cuando los supuestos generativos son falsos
pero: supuestos fuertespero: necesita más datos; no genera ni imputa

Regla práctica: ¿pocos datos o necesitas la densidad? → generativo. ¿Muchos datos y solo quieres la etiqueta? → discriminativo.

μ0=0\mu_0 = 0, μ1=4\mu_1 = 4, σ2=2\sigma^2 = 2, π1=0.25\pi_1 = 0.25. ¿Dónde está la frontera LDA?

Ver solución

x∗=0+42−24log⁡0.250.75=2−0.5⋅(−1.0986)=2.549x^* = \frac{0+4}{2} - \frac{2}{4}\log\frac{0.25}{0.75} = 2 - 0.5\cdot(-1.0986) = 2.549. La frontera se corrió de 2 hacia la clase 1 (la rara): ahora se necesita más evidencia para predecir la clase 1.

Autoevaluación

0/5 correctas · 0 respondidas
1. LDA produce una frontera lineal porque…
2. La distancia de Mahalanobis…
3. Con priors distintos, la frontera LDA se desplaza…
4. ¿Qué modelo necesita más datos para estimar sus parámetros?
5. El posterior de LDA tiene la forma…
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis as QDA
lda = LDA(store_covariance=True).fit(X_tr, y_tr)
qda = QDA(reg_param=0.1).fit(X_tr, y_tr) # reg_param encoge Σₖ (útil con d grande)
mu, Sigma = lda.means_, lda.covariance_ # medias por clase y Σ agrupada
w = lda.coef_ # = Σ⁻¹(μ₁ − μ₀) en el caso binario
print(lda.score(X_te, y_te), qda.score(X_te, y_te))
lda.predict_proba(X_te[:3]) # posterior σ(wᵀx + b)

Fuente ·ML_Course_Generative_Probabilistic_Models.pdf (slides 24–37) · ML_Course/session-05b-lda-qda.ipynb · ML_Course/session-05c-comparing-generative-models.ipynb