El truco del kernel
En simple: lee esto primero
Si los datos no se pueden separar con una recta, los «levantamos» a más dimensiones donde sí se puede; el truco del kernel hace eso sin calcularlo de verdad.
Tienes monedas rojas en el centro de una mesa y azules alrededor: ninguna recta las separa. Pero si das un golpe y las rojas saltan, en el aire (3D) una hoja plana las separa. El kernel calcula «cómo se verían en el aire» sin hacerlas saltar.
- Un mapa de features transforma cada punto en uno con más coordenadas (x → x, x², …).
- Un kernel es un atajo: da directamente la similitud entre dos puntos en ese espacio grande, sin construirlo.
- Funciona porque SVM (en su forma dual) solo necesita similitudes entre pares de puntos.
- kernel
- una función que mide qué tan parecidos son dos puntos (en un espacio «escondido»).
- mapa de features (φ)
- la transformación que agrega dimensiones.
- matriz de Gram
- la tabla con la similitud de cada par de puntos.
- semidefinida positiva
- condición técnica para que una función sea un kernel válido (que se porte como una similitud «honesta»).
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.
El enganche que dejamos en el dual
Sección titulada «El enganche que dejamos en el dual»Tanto el entrenamiento como la predicción del SVM tocan los datos solo a través de productos internos:
Ninguna coordenada cruda aparece sola. Si pudiéramos calcular productos internos en un espacio más rico sin visitarlo, el SVM trazaría una frontera ahí, y esa frontera, vista desde casa, sería curva. Ese es todo el plan.
Primero, un mapa de features honesto
Sección titulada «Primero, un mapa de features honesto»Dos anillos concéntricos: está demostrado que ninguna recta los separa. Aplica a cada punto (o, en la versión de la sesión 07, ): un plano los separa limpiamente. Traducido de vuelta, el plano es : un círculo de radio .
El SVM nunca aprendió nada curvo. Trazó una superficie perfectamente plana, en un espacio donde «plano» significa «círculo» al volver a casa. Todo método de kernels funciona así.
El problema: un mapa de grado 2 en dimensiones necesita features; grado , . Con y , medio billón de números por punto. Construir no escala.
El truco: el producto interno sin el mapa
Sección titulada «El truco: el producto interno sin el mapa»Para ese de grado 2:
Con números, , : ruta barata , al cuadrado 1. Ruta cara , , producto . ✓ La ruta barata cuesta y nunca construye el vector levantado; el ahorro crece sin límite con el grado.
Lo mismo con : expandiendo aparece , un producto de 6 dimensiones calculado con un escalar al cuadrado.
El truco, enunciado
Sección titulada «El truco, enunciado»Un kernel es una función que es igual a para algún mapa . Reemplaza cada del dual por y el SVM ajusta un hiperplano de margen máximo en el espacio sin calcular una sola coordenada de :
Todo lo demás (restricciones, casos KKT, esparcidad, convexidad) se traslada tal cual. El algoritmo ni se entera de que cambió de espacio.
¿Qué cuenta como kernel?
Sección titulada «¿Qué cuenta como kernel?»es válido si y solo si es simétrico () y semidefinido positivo (condición de Mercer): toda matriz de Gram cumple para todo (equivalentemente, autovalores ≥ 0). Eso garantiza que existe un , aunque nunca lo escribamos.
- La matriz de Gram es una matriz de similitud: ordenando filas y columnas por clase, se ven bloques brillantes dentro de cada clase. PSD es el sello algebraico de un producto interno genuino.
- Reglas de cierre: si son kernels, también lo son , y con . Sumas y productos de similitudes válidas siguen siendo válidos.
- El kernel sigmoide se usa a veces pero no siempre es PSD.
Ejercicio
Sección titulada «Ejercicio»Verifica con , que para el de 6 dimensiones.
Ver solución
Ruta kernel: , .
Ruta φ: ; . Producto: ✓.
Autoevaluación
0/4 correctas · 0 respondidasEn código: comprobar la identidad del kernel
Sección titulada «En código: comprobar la identidad del kernel»import numpy as npfrom sklearn.metrics.pairwise import polynomial_kernel
def phi(v): # mapa explícito de (1 + xᵀz)² en 2-D x1, x2 = v s = np.sqrt(2) return np.array([1, s*x1, s*x2, x1**2, x2**2, s*x1*x2])
x, z = np.array([1., 2.]), np.array([3., -1.])print(phi(x) @ phi(z), (1 + x @ z) ** 2) # 4.0 4.0 → mismo númeroprint(polynomial_kernel([x], [z], degree=2, gamma=1, coef0=1))
K = polynomial_kernel(X, degree=2, coef0=1) # matriz de Gram n × nprint(np.linalg.eigvalsh(K).min() >= -1e-9) # PSD → kernel válidoPara profundizar
Sección titulada «Para profundizar»Fuente ·ML_Course_SVM.pdf (slides 62–69) · ML_Course_Kernels.pdf (Lecture 07, slides 1–9) · ML_Course/session-06b-dual-and-kernel-trick.ipynb · ML_Course/session-07-kernels-in-practice.ipynb