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:
- Visualização — humanos enxergam em 2D/3D; projetar os dados revela agrupamentos, gradientes e outliers;
- Remoção de ruído e redundância — atributos correlacionados (lembre-se das medidas de pétala da iris) carregam informação duplicada;
- 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.
A maldição da dimensionalidade, medida
O motivo 3 acima costuma ser afirmado e raramente demonstrado, então comece por ele. Em dimensão alta acontece algo contraintuitivo com a própria distância: todos os pares de pontos acabam mais ou menos igualmente distantes.
Sorteie n pontos uniformemente no cubo unitário e olhe todas as distâncias par a par. Em duas dimensões o histograma é largo — alguns pares estão perto, outros longe; "vizinho mais próximo" seleciona algo com significado. Aumente a dimensão e o histograma colapsa num pico estreito:
O número a observar é o contraste relativo, \((d_{\max} - d_{\min})/d_{\min}\). Em \(d = 2\) o ponto mais distante costuma estar dezenas de vezes mais longe que o mais próximo. Em \(d = 256\) essa razão cai abaixo de 1,5 — o vizinho mais próximo mal é mais próximo que o mais distante.
Tudo o que depende de distância se degrada junto: k-NN, k-means, núcleos RBF e os próprios t-SNE e UMAP. É por isso que esses dois métodos recomendam rodar PCA antes quando a entrada tem centenas de dimensões. Não é só velocidade — é entregar a eles vizinhanças que ainda significam alguma coisa.
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 é
O primeiro componente principal é o vetor unitário \(w\) que maximiza a variância da projeção:
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:
Feito à mão
Cinco pontos, escolhidos para que todo número saia inteiro:
| \(x\) | \(y\) | \(x-\bar{x}\) | \(y-\bar{y}\) |
|---|---|---|---|
| 2 | 4 | −3 | −1 |
| 4 | 2 | −1 | −3 |
| 5 | 5 | 0 | 0 |
| 6 | 8 | 1 | 3 |
| 8 | 6 | 3 | 1 |
A média é \((5, 5)\). Com \(n - 1 = 4\):
Agora resolva \(\det(C - \lambda I) = 0\), que para uma 2×2 é uma quadrática de cabeça:
Duas conferências que vale interiorizar: os autovalores somam o traço (8 + 2 = 10 = 5 + 5) e o traço é a variância total. Logo \(\text{EVR}_1 = 8/10 = 80\%\).
Substituindo \(\lambda_1 = 8\) em \((C - 8I)w = 0\) resulta \(-3w_1 + 3w_2 = 0\), ou seja \(w_1 = w_2\): a PC1 é \((1,1)/\sqrt{2}\) — exatamente a diagonal de 45°, que é para onde a nuvem visivelmente aponta. A PC2 fica obrigada a ser \((1,-1)/\sqrt{2}\), perpendicular a ela.
Projetando, os escores da PC1 são \(-2\sqrt2,\ -2\sqrt2,\ 0,\ 2\sqrt2,\ 2\sqrt2\), cuja variância é 8 — o autovalor de novo. O autovalor não é um substituto para a variância ao longo da componente; ele é essa variância.
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.
Essa derivação diz que a PCA "maximiza a variância projetada", o que soa abstrato até você fazer à mão. Gire a reta: a barra à direita é a variância capturada naquele ângulo e os segmentos cinzas são o que se joga fora. Existe exatamente um ângulo em que a barra atinge o pico — aperte encontrar PC1 para encaixar nele e confirmar que era para onde você convergia.
Duas formas de dizer a mesma coisa
Maximizar a variância projetada e minimizar os resíduos ao quadrado até a reta são a mesma otimização. Acompanhe as duas quantidades no simulador: quando uma atinge o pico, a outra atinge o fundo. É também a diferença para a regressão linear, que minimiza distâncias verticais em vez de perpendiculares — mesmos dados, outra pergunta, outra reta.
Reconstrução: o que k componentes de fato guardam
A PCA é reversível. Desça de \(d\) dimensões para \(k\) e projete de volta: você obtém uma aproximação cujo erro é exatamente a variância descartada — \(\sum_{j>k}\lambda_j\). Nos cinco pontos acima, guardar só a PC1 descarta \(\lambda_2 = 2\), isto é, 20% da variância.
O simulador abaixo faz isso sobre imagens 12×12. Deslize o \(k\) e observe a reconstrução: o interessante é quão poucas componentes o olho exige antes de parar de reclamar.
Na prática, é por isso que a PCA serve também como compressão e como remoção de ruído: as direções descartadas são as de baixa variância — e o ruído tende a morar lá.
Onde a PCA se esgota
A PCA só sabe girar e projetar — ela move os eixos, nunca os entorta. Quando a estrutura dos dados é uma curvatura, isso é fatal.
O rocambole suíço é o contraexemplo padrão: uma folha 2-D enrolada em 3-D. Dois pontos em camadas opostas do rolo podem estar próximos em linha reta enquanto estão bem distantes ao longo da folha. Marque marcar par de pontos para ver um par assim, depois projete com PCA e veja as duas cores se misturarem:
A distinção que o simulador torna visível é entre distância euclidiana (atravessando o vazio entre as camadas) e distância geodésica (caminhando sobre a superfície). Métodos de variedade são os que usam a segunda.
Métodos não lineares: t-SNE e UMAP
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á
transformpara novos pontos (na formulação padrão) — é uma ferramenta de visualização, não um extrator de atributos geral.
Essas ressalvas ficam mais fáceis de acreditar depois de vê-las acontecer. O simulador abaixo roda gradiente descendente de verdade sobre a divergência KL, no seu navegador — nada é pré-calculado:
Três experimentos que valem a pena antes de confiar em qualquer figura de t-SNE que você não tenha feito:
- escolha ruído uniforme e rode. O t-SNE ainda assim produz manchas de aparência organizada. O método sempre devolve grupos; os dados nem sempre os contêm.
- mantenha o conjunto e mude apenas a perplexidade. O número de grupos aparentes pode mudar. Reporte a perplexidade junto de qualquer figura de t-SNE, como você reportaria uma semente aleatória;
- escolha grupos de tamanhos diferentes e compare os tamanhos na tela com os reais. Eles não batem — o t-SNE equaliza regiões densas e esparsas, que é exatamente por que ler tamanho de grupo ou distância entre grupos num gráfico de t-SNE é um erro.
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
transformpara 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:
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
Referências
- Pearson, K. "On Lines and Planes of Closest Fit to Systems of Points in Space." Philosophical Magazine 2 (1901). DOI
- Hotelling, H. "Analysis of a Complex of Statistical Variables into Principal Components." J. Educational Psychology 24 (1933). DOI
- van der Maaten, L.; Hinton, G. "Visualizing Data using t-SNE." JMLR 9 (2008). texto completo
- McInnes, L.; Healy, J.; Melville, J. "UMAP: Uniform Manifold Approximation and Projection." arXiv (2018). arXiv:1802.03426
Bibliografia completa do curso na página de referências.
