Kernel PCA amplía la PCA clásica mediante el truco del kernel: proyecta implícitamente los datos a un espacio de características no lineal y ejecuta allí la PCA para desenredar variedades curvas.
1. ¿Por qué no basta con la PCA lineal? #
- PCA sólo maximiza la varianza a lo largo de combinaciones lineales, por lo que ignora curvaturas.
- Muchos conjuntos de datos (círculos, espirales) viven en variedades no lineales.
- Kernel PCA aplica una transformación (\phi(x)) y calcula productos internos con un kernel para capturar esa geometría.
2. Formulación #
Con muestras (x_i \in \mathbb{R}^d) y una función kernel (k(x_i,x_j)):
- Matriz de Gram $$K_{ij} = \langle \phi(x_i), \phi(x_j) \rangle = k(x_i, x_j)$$
- Autovalores $$K v = \lambda v$$ Los autovectores, tras normalizarlos, se usan para proyectar datos igual que en PCA.
Kernels habituales:
- RBF: (k(x,x’) = \exp(-\gamma \lVert x - x’ \rVert^2))
- Polinómico: (k(x,x’) = (\langle x,x’ \rangle + c)^d)
3. Dataset de juguete #
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.datasets import make_circles
X, y = make_circles(n_samples=400, factor=0.3, noise=0.15)
plt.figure(figsize=(8, 8))
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title("Círculos concéntricos")
plt.show()
4. Ejecutar Kernel PCA #
from sklearn.decomposition import KernelPCA
kpca = KernelPCA(kernel="rbf", gamma=3)
X_kpca = kpca.fit_transform(X)
plt.figure(figsize=(8, 8))
plt.scatter(X_kpca[:, 0], X_kpca[:, 1], c=y)
plt.title("Embedding de 2D con Kernel PCA")
plt.show()
El resultado separa claramente los círculos, cosa que la PCA lineal no logra.
5. Consejos #
- No linealidad: elige el kernel según la geometría (RBF para curvas suaves, polinómico para interacciones).
- Escalado: normaliza las características antes de construir el kernel.
- Coste: el Gram matrix es (O(n^2)); vigila memoria/tiempo en datasets grandes.
- Modelado posterior: las intuiciones sobre kernels son transferibles a SVM u otros métodos.
Notas #
- Kernel PCA = kernel + PCA; excelente para explorar datos difíciles de linearizar.
- Determina cuántos componentes necesitas observando el espectro de autovalores.
- Para escalar a millones de puntos, revisa Nyström o random Fourier features.