Ir al contenido

Zoo de kernels, γ y kernel ridge

En simple: lee esto primero

En la práctica eliges un kernel (lineal, polinómico o RBF) y ajustas su perilla γ para controlar qué tan curva puede ser la frontera.

Imagínalo así

El kernel RBF es como poner un foco de luz sobre cada punto: γ grande = focos chiquitos y concentrados (frontera muy detallada, memoriza); γ chico = focos amplios (frontera suave).

Lo que tienes que llevarte
  • Lineal: frontera recta. Polinómico: curvas de cierto grado. RBF: casi cualquier forma.
  • γ alto → frontera muy ajustada (overfitting). γ bajo → frontera muy suave (underfitting).
  • Siempre escala los datos antes y elige C y γ con validación cruzada.
Palabras raras de esta página
RBF / gaussiano
kernel que mide similitud según la distancia: cerca = parecido, lejos = nada que ver.
γ (gamma)
qué tan rápido «se apaga» la similitud con la distancia.
teorema del representante
la solución siempre se puede escribir como combinación de los puntos de entrenamiento.
kernel ridge
regresión ridge con el truco del kernel: curvas con fórmula directa.

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.

KernelFórmulaEspacio de featuresAlcance
Linealx⊤x′\mathbf{x}^\top\mathbf{x}'el original: recupera el modelo linealcrece sin límite
Polinómico(c+x⊤x′)d(c+\mathbf{x}^\top\mathbf{x}')^dtodos los monomios hasta grado dd (finito pero enorme)global: crece a medida que los puntos se alinean
RBF / gaussianoexp⁡(−γ∥x−x′∥2)\exp(-\gamma\Vert \mathbf{x}-\mathbf{x}'\Vert ^2)dimensión infinitalocal: una campana de ancho ∝1/γ\propto1/\sqrt\gamma

Léelo como similitud: el RBF vale 1 cuando los puntos coinciden y decae a 0 cuando se separan.

¿Por qué el RBF es de dimensión infinita?

Sección titulada «¿Por qué el RBF es de dimensión infinita?»

Sacando los factores de las normas, queda e2γx⊤x′e^{2\gamma\mathbf{x}^\top\mathbf{x}'}, y expandiendo la exponencial en serie de potencias:

e2γ x⊤x′=∑k=0∞(2γ)kk!(x⊤x′)ke^{2\gamma\,\mathbf{x}^\top\mathbf{x}'} = \sum_{k=0}^\infty\frac{(2\gamma)^k}{k!}\big(\mathbf{x}^\top\mathbf{x}'\big)^k

Cada (x⊤x′)k(\mathbf{x}^\top\mathbf{x}')^k es el kernel polinómico de grado kk: el RBF mezcla todos los grados a la vez con pesos no nulos ⇒ infinitas features. Y aun así se evalúa en una línea. γ más grande pasa peso a grados más altos: más local, más complejo.

Un kernel es una similitud: local vs global

K(x, ancla) en 1-D mientras x se mueve. El lineal crece sin límite, el polinómico tiene alcance global y el RBF es una campana local cuyo ancho fija γ.

-3-2-10123-2-101234x (el otro punto en el ancla)K(x, x′)
lineal x·x′polinómico (1 + x·x′)³ / 4RBF γ = 1RBF γ = 0.17 (más ancho)

La matriz de Gram y la prueba de validez (PSD)

28 puntos de dos clases, ordenados por clase. Cada celda es K(xᵢ, xⱼ): verde = similitud positiva, rojo = negativa. Un kernel es válido si la matriz es simétrica y todos sus autovalores son ≥ 0.

autovalor mínimo1.92e-6
¿válido (PSD)?sí
Todos los autovalores ≥ 0: hay un φ (quizás infinito) con K(x, x′) = φ(x)ᵀφ(x′). Los dos bloques brillantes en la diagonal son las clases: dentro de cada clase los puntos se parecen. Sube γ: los bloques se apagan y queda casi solo la diagonal (cada punto solo se parece a sí mismo ⇒ overfitting).

El kernel elige el espacio de hipótesis. En la slide: lineal (acc 0.83) traza un corte recto; polinómico grado 3 (0.90) se curva; RBF (0.94) envuelve ajustado.

El mismo SVM, tres kernels

Se resuelve el dual con K(xᵢ, xⱼ) en lugar de xᵢᵀxⱼ; la predicción es f(x) = Σ αᵢyᵢK(xᵢ, x) + b. El color es el signo (y la confianza) de f; la línea clara es f = 0. Los anillos marcan los vectores de soporte.

-3-2-10123-202x₁x₂
y = +1y = −1vector de soporte (αᵢ > 0)
accuracy de entrenamiento100%
vectores de soporte23 / 90
γ controla el ancho de cada «bump»: γ pequeño ⇒ frontera casi lineal (underfit); γ grande ⇒ islas alrededor de cada punto y casi todos son vectores de soporte (overfit). Ajusta γ y C juntos por validación cruzada, nunca por accuracy de entrenamiento.
  • γ pequeño (0.1): campanas tan anchas que el modelo subajusta (acc 0.84).
  • γ bueno (1): frontera limpia (0.93).
  • γ grande (60): campanitas que sobreajustan en islas alrededor de cada punto (0.99 en entrenamiento… engañoso).

Para un riesgo regularizado minimizado sobre un espacio de kernel, el ff óptimo es una suma ponderada de kernels en los puntos de entrenamiento:

f(x)=∑i=1nαi K(xi,x)f(\mathbf{x}) = \sum_{i=1}^n\alpha_i\,K(\mathbf{x}_i,\mathbf{x})

Por enorme que sea el espacio de features, la solución vive en el espacio finito generado por los datos. ¿Por qué? Cualquier parte de w\mathbf{w} ortogonal a los {ϕ(xi)}\{\phi(\mathbf{x}_i)\} no cambia ninguna predicción pero sí suma a la penalización ∥w∥2\|\mathbf{w}\|^2, así que el óptimo no tiene esa parte. Literalmente: una campana por punto de entrenamiento, escalada por αi\alpha_i; αi>0\alpha_i>0 sube la curva, αi<0\alpha_i<0 la baja.

Ridge hecho en el espacio de features. Con el representante, f=Kα\mathbf{f} = \mathbf{K}\boldsymbol\alpha y ∥w∥2=α⊤Kα\|\mathbf{w}\|^2 = \boldsymbol\alpha^\top\mathbf{K}\boldsymbol\alpha:

min⁡α∥y−Kα∥2+λ α⊤Kα⟹(K+λI)α=y⟹α=(K+λI)−1y\min_{\boldsymbol\alpha}\|\mathbf{y}-\mathbf{K}\boldsymbol\alpha\|^2+\lambda\,\boldsymbol\alpha^\top\mathbf{K}\boldsymbol\alpha\quad\Longrightarrow\quad(\mathbf{K}+\lambda\mathbf{I})\boldsymbol\alpha = \mathbf{y}\quad\Longrightarrow\quad\boxed{\boldsymbol\alpha = (\mathbf{K}+\lambda\mathbf{I})^{-1}\mathbf{y}}

Un solo sistema lineal, sin iterar: regresión no lineal en forma cerrada. Con kernel lineal es exactamente ridge. La misma idea kerneliza SVR, kernel PCA y los procesos gaussianos.

Kernel ridge: una curva hecha de campanas

Por el teorema del representante, el óptimo es f(x)=∑iαiK(xi,x)f(x)=\sum_i \alpha_i K(x_i,x): una campana por punto de entrenamiento, escalada por αᵢ. Y los αᵢ salen de un solo sistema lineal: α=(K+λI)−1y\boldsymbol\alpha=(\mathbf{K}+\lambda\mathbf{I})^{-1}\mathbf{y}.

-202-2-1012xy
f(x) = Σ αᵢ K(xᵢ, x)campana con αᵢ > 0campana con αᵢ < 0verdadpuntos de test
RMSE train0.119
RMSE test0.231
max |αᵢ|1.97
γ grande ⇒ campanas angostas: la curva pasa por cada punto y oscila entre ellos (overfit; mira el test). γ pequeño ⇒ campanas anchísimas, casi una recta. λ hace lo mismo que en ridge: encoge los αᵢ. Costo: la matriz K es n × n (memoria O(n²), resolver ∼O(n³)).
  • Todo algoritmo que use productos internos se vuelve no lineal cambiando xi⊤xj\mathbf{x}_i^\top\mathbf{x}_j por K(xi,xj)=ϕ(xi)⊤ϕ(xj)K(\mathbf{x}_i,\mathbf{x}_j)=\phi(\mathbf{x}_i)^\top\phi(\mathbf{x}_j).
  • El truco: calcular KK directo, nunca ϕ\phi (aunque sea infinita, RBF).
  • Válidos = simétricos y PSD; la Gram es una matriz de similitud; cerrados bajo +, ×, escala.
  • Zoo: lineal, (c+x⊤x′)d(c+\mathbf{x}^\top\mathbf{x}')^d, exp⁡(−γ∥x−x′∥2)\exp(-\gamma\|\mathbf{x}-\mathbf{x}'\|^2); γ y C por CV; estandarizar.
  • Representante: f(x)=∑iαiK(xi,x)f(\mathbf{x})=\sum_i\alpha_iK(\mathbf{x}_i,\mathbf{x}); kernel ridge: α=(K+λI)−1y\boldsymbol\alpha=(\mathbf{K}+\lambda\mathbf{I})^{-1}\mathbf{y}.
  • Costo: O(n2)O(n^2) memoria, ∼O(n3)O(n^3) resolver: excelente para problemas no lineales pequeños/medianos.

Con γ=0.5\gamma = 0.5, calcula KRBFK_\text{RBF} entre (0,0)(0,0) y (1,1)(1,1), y entre (0,0)(0,0) y (3,0)(3,0). ¿Qué pasa con γ = 5?

Ver solución
  • ∥(1,1)∥2=2\|(1,1)\|^2 = 2: e−0.5⋅2=e−1=0.368e^{-0.5\cdot2} = e^{-1} = 0.368.
  • ∥(3,0)∥2=9\|(3,0)\|^2 = 9: e−4.5=0.011e^{-4.5} = 0.011.
  • Con γ = 5: e−10≈4.5×10−5e^{-10}\approx4.5\times10^{-5} y e−45≈0e^{-45}\approx0: cada punto solo «se parece a sí mismo» ⇒ islas, overfitting.

Autoevaluación

0/5 correctas · 0 respondidas
1. El kernel RBF corresponde a un ϕ\phi de dimensión infinita que nunca se calcula.
2. Con γ muy grande en un SVM RBF…
3. El teorema del representante dice que el óptimo es…
4. La solución de kernel ridge es…
5. ¿Cuál kernel tiene alcance local?
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.kernel_ridge import KernelRidge
from sklearn.model_selection import GridSearchCV
import numpy as np
svm = GridSearchCV(make_pipeline(StandardScaler(), SVC(kernel='rbf')),
{'svc__C': np.logspace(-1, 3, 5), 'svc__gamma': np.logspace(-4, 0, 5)},
cv=5).fit(X_tr, y_tr) # C y γ JUNTOS
print(svm.best_params_, svm.score(X_te, y_te))
kr = KernelRidge(kernel='rbf', alpha=0.1, gamma=1.0).fit(x_tr.reshape(-1, 1), y_tr)
alpha = kr.dual_coef_ # α = (K + λI)⁻¹ y (λ se llama alpha en sklearn)
y_hat = kr.predict(x_te.reshape(-1, 1)) # f(x) = Σ αᵢ K(xᵢ, x)

Fuente ·ML_Course_Kernels.pdf (Lecture 07) · ML_Course/session-07-kernels-in-practice.ipynb