Kernel PC A.pt

Kernel PC A.pt

Atualizado 2026-02-24 Leitura 3 min
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)):

  1. 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.

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

Conjunto de dados de dois círculos


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

Resultado do Kernel PCA

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