Ir para o conteúdo

Redução de Dimensionalidade

Conjuntos de dados reais costumam ter dezenas, centenas ou — para texto e imagens — milhares de atributos. A redução de dimensionalidade os comprime em poucas dimensões informativas, por três motivos:

  1. Visualização — humanos enxergam em 2D/3D; projetar os dados revela agrupamentos, gradientes e outliers;
  2. Remoção de ruído e redundância — atributos correlacionados (lembre-se das medidas de pétala da iris) carregam informação duplicada;
  3. A maldição da dimensionalidade — em altas dimensões, os dados ficam esparsos e as distâncias perdem sentido, degradando métodos baseados em distância como k-NN e agrupamento.

PCA — Análise de Componentes Principais

O PCA (Pearson, 1901; Hotelling, 1933) é o método clássico e linear: encontrar as direções ortogonais de variância máxima e projetar sobre as primeiras.

A matemática

Dados centrados \(X \in \mathbb{R}^{n \times d}\) (cada coluna com média zero), a matriz de covariância amostral é

\[ C = \frac{1}{n-1} X^\top X \in \mathbb{R}^{d \times d}. \]

O primeiro componente principal é o vetor unitário \(w\) que maximiza a variância da projeção:

\[ w_1 = \arg\max_{\|w\|=1} \; w^\top C\, w. \]

A solução é o autovetor de \(C\) com o maior autovalor \(\lambda_1\); o segundo componente é o próximo autovetor, ortogonal ao primeiro, e assim por diante. O autovalor \(\lambda_k\) é a variância capturada pelo componente \(k\), o que dá a razão de variância explicada:

\[ \text{EVR}_k = \frac{\lambda_k}{\sum_{j=1}^{d} \lambda_j}. \]
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

X_scaled = StandardScaler().fit_transform(X)   # escalone primeiro — o PCA persegue variância!
pca = PCA(n_components=0.95)                    # manter 95% da variância
Z = pca.fit_transform(X_scaled)
pca.explained_variance_ratio_                  # variância capturada por componente

Escalone antes do PCA

O PCA encontra direções de variância máxima. Se um atributo é medido em milhares e outro em dezenas, o primeiro componente simplesmente aponta para o atributo de grande escala. Padronize primeiro (Pré-processamento).

Notas práticas:

  • Os componentes são combinações lineares dos atributos originais — inspecione pca.components_ para interpretá-los;
  • O scree plot (variância explicada por componente) orienta quantos componentes manter — procure o "cotovelo";
  • O PCA também é uma ferramenta de compressão/remoção de ruído: reconstrua com poucos componentes para filtrar ruído.

Encontre o PC1 na mão — gire o eixo até a variância projetada atingir o pico e depois confira com o botão de encaixe:

Métodos não lineares: t-SNE e UMAP

Projeções lineares não conseguem desenrolar estruturas curvas (o clássico "Swiss roll"). Dois métodos não lineares modernos dominam a prática de visualização:

t-SNE (van der Maaten & Hinton, 2008)

O t-SNE converte distâncias par a par em probabilidades de vizinhança em alta dimensão e depois encontra um layout 2D cujas probabilidades de vizinhança coincidam (minimizando a divergência KL). Ele se destaca em revelar a estrutura local de agrupamentos.

Ressalvas que você precisa conhecer:

  • A perplexidade (≈ número efetivo de vizinhos, típico 5–50) muda a figura substancialmente;
  • Os tamanhos dos agrupamentos e as distâncias entre agrupamentos em um gráfico t-SNE não têm significado — o algoritmo preserva vizinhanças, não a geometria global;
  • É estocástico: sementes diferentes geram layouts diferentes;
  • Não há transform para novos pontos (na formulação padrão) — é uma ferramenta de visualização, não um extrator de atributos geral.

UMAP (McInnes, Healy & Melville, 2018)

O UMAP constrói um grafo de k-vizinhos mais próximos dos dados, modela sua estrutura topológica difusa e otimiza um layout de baixa dimensão que a preserva. Comparado ao t-SNE, ele:

  • costuma ser mais rápido e escala melhor;
  • preserva mais estrutura global (as posições relativas dos agrupamentos significam um pouco mais);
  • suporta transform para novos pontos, podendo alimentar modelos subsequentes — é exatamente esse seu papel dentro do BERTopic, onde reduz embeddings de texto antes do agrupamento.
# pip install umap-learn
import umap
Z = umap.UMAP(n_neighbors=15, min_dist=0.1, n_components=2).fit_transform(X_scaled)

PCA vs t-SNE, lado a lado

Dígitos manuscritos (64 dimensões → 2), os mesmos dados, duas projeções:

Projeções PCA vs t-SNE do conjunto de dígitos

O PCA — a melhor visão linear — sobrepõe várias classes de dígitos: duas direções de variância máxima não bastam. O t-SNE separa as dez classes quase perfeitamente ao preservar vizinhanças locais. O preço: eixos, tamanhos de agrupamentos e distâncias entre agrupamentos no painel t-SNE não têm significado interpretável.

Escolhendo um método

Objetivo Método
Pré-processar atributos para um modelo subsequente PCA (rápido, determinístico, tem transform)
Entender/interpretar direções de variação PCA (os componentes são combinações lineares)
Visualizar estrutura de agrupamentos t-SNE ou UMAP
Reduzir antes de agrupamento por densidade (ex.: HDBSCAN, BERTopic) UMAP
Comprimir/remover ruído de imagens ou sinais PCA

Material de aula

Notebook da aula (em português)

Notebook prático usado em sala — Aula 06 — PCA, t-SNE e UMAP: abrir no Colab

Vídeo

Latent Space Visualisation: PCA, t-SNE, UMAP

Latent Space Visualisation: PCA, t-SNE, UMAP


Quiz