Kernel PC A.pt
Resumo
- O Kernel PCA realiza PCA num espaço de características não linear implícito usando kernels.
- A escolha do kernel e seus parâmetros (por exemplo, RBF gamma) determinam qual estrutura não linear se torna separável.
- É útil quando o PCA linear não consegue capturar padrões curvos ou com interações complexas.
Intuição #
O Kernel PCA altera a geometria de similaridade antes de extrair as componentes principais. Padrões que são não lineares no espaço de entrada podem tornar-se linearmente separáveis no espaço do kernel.
Explicação Detalhada #
1. Por que ir além do PCA simples? #
- O PCA padrão só vê variância linear ao longo dos eixos originais, então a estrutura não linear é achatada incorretamente.
- Muitos conjuntos de dados reais encontram-se em superfícies curvas; gostaríamos de capturar essa curvatura enquanto mantemos a interpretabilidade do PCA.
- O Kernel PCA usa um mapeamento de características não linear (\phi(x)) e calcula produtos internos via kernels, permitindo análise do tipo PCA nesse espaço mais rico.
2. Formulação #
Dados amostras (x_i \in \mathbb{R}^d) e um mapeamento de características (\phi(x)):
Construir a matriz de kernel (Gram)
$$ K_{ij} = \langle \phi(x_i), \phi(x_j) \rangle = k(x_i, x_j) $$Não é necessário um (\phi) explícito desde que possamos avaliar a função kernel.
Resolver o problema de autovalores
$$ K v = \lambda v $$Os autovetores fornecem as componentes principais no espaço de características. Após a normalização, podemos projetar amostras da mesma forma que no PCA.
Kernels típicos:
- Kernel RBF $$k(x, x') = \exp(-\gamma \lVert x - x' \rVert^2)$$
- Kernel polinomial $$k(x, x') = (\langle x, x' \rangle + c)^d$$
3. Criar um conjunto de dados de exemplo #
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("Concentric circles")
plt.show()
4. Executar 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("2-D embedding via Kernel PCA")
plt.show()
Comparado com o PCA linear, os círculos concêntricos são agora claramente separáveis.
5. Dicas #
- Não linearidade: escolha kernels (RBF, polinomial) que reflitam o tipo de curvatura nos seus dados.
- Escalonamento: padronize as características antes de construir a matriz de kernel para manter o (\gamma) significativo.
- Computação: a matriz de Gram é (O(n^2)); a memória torna-se o gargalo para (n) grande.
- Modelos subsequentes: as mesmas ideias de kernel aparecem nos SVMs; o Kernel PCA pode ser um passo exploratório útil.
Notas #
- Kernel PCA = truque do kernel + PCA; preserva variedades não lineares que o PCA comum não consegue.
- Verifique quantas componentes realmente precisa—(k) grande pode ajustar ruído.
- Se a escalabilidade for uma preocupação, considere kernels aproximados (Nyström, características aleatórias de Fourier).