Kernel-PCA

Basic

Kernel PCA | Implementación en Python

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)):

  1. Matriz de Gram $$K_{ij} = \langle \phi(x_i), \phi(x_j) \rangle = k(x_i, x_j)$$
  2. 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()

Dataset de círculos


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()

Resultado Kernel PCA

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.