Neste artigo, você aprenderá como escolher entre PCA e t-SNE para visualizar dados de alta dimensão, com compensações claras, advertências e exemplos práticos de Python.
Os tópicos que cobriremos incluem:
- As ideias centrais, pontos fortes e limites do PCA versus t-SNE.
- Quando usar cada método – e quando combiná-los.
- Um fluxo de trabalho prático PCA → t-SNE com código scikit-learn.
Não vamos perder mais tempo.
Para os cientistas de dados, trabalhar com dados de alta dimensão faz parte da vida diária. Desde recursos do cliente em análises até valores de pixel em imagens e vetores de palavras em PNL, os conjuntos de dados geralmente contêm centenas e milhares de variáveis. Visualizar dados tão complexos é difícil.
É aí que entram as técnicas de redução de dimensionalidade. Dois dos métodos mais utilizados são Análise de Componentes Principais (PCA) e Incorporação estocástica de vizinho t-distribuída (t-SNE). Embora ambos reduzam dimensões, eles atendem a objetivos muito diferentes.
Compreendendo a análise de componentes principais (PCA)
Análise de Componentes Principais é um método linear que transforma dados em novos eixos chamados componentes principais. Seu objetivo é converter seus dados em um novo sistema de coordenadas onde as maiores diferenças estão no primeiro eixo (o primeiro componente principal), as segundas maiores no segundo eixo e assim por diante. Ele faz isso realizando uma autocomposição (o processo de quebrar uma matriz quadrada em uma forma mais simples e “canônica” usando seu autovalores e autovetores) da matriz de covariância de dados ou um Decomposição de valor singular (SVD) da matriz de dados.
Esses componentes capturam a maior variação nos dados e são ordenados do mais importante para o menos importante. Pense no PCA como uma rotação do seu conjunto de dados para encontrar o melhor ângulo que mostre a maior difusão de informações.
Principais vantagens e quando usar o PCA
- Redução e pré-processamento de recursos: Use o PCA para reduzir o número de recursos de entrada para um modelo downstream (como regressão ou classificação), mantendo os sinais mais informativos.
- Redução de ruído: Ao descartar componentes com menor variação (geralmente ruído), o PCA pode limpar seus dados.
- Componentes interpretáveis: Você pode inspecionar o
components_atributo para ver quais recursos originais contribuem mais para cada componente principal. - Preservação da Variância World: Ele mantém fielmente distâncias e relacionamentos em grande escala em seus dados.
Implementando PCA com Scikit-Be taught
Usando PCA em Python scikit-aprender é simples. O parâmetro chave é n_componentsque outline o número de dimensões para sua saída.
from sklearn.decomposition import PCA from sklearn.datasets import load_iris import matplotlib.pyplot as plt # Carrega dados de amostra iris = load_iris() X = iris.information y = iris.goal # Aplique PCA, reduzindo para 2 dimensões para visualização pca = PCA(n_components=2) X_pca = pca.fit_transform(X) # Visualize o resultado plt.determine (figsize = (8, 6)) dispersão = plt.scatter (X_pca (:, 0), X_pca (:, 1), c = y, cmap = ‘viridis’, edgecolor = “ok”, s = 70) plt.xlabel (‘Componente principal 1’) plt.ylabel (‘Componente principal 2’) plt.title (‘PCA do conjunto de dados Iris’) plt.colorbar(scatter, label=”Iris Species”) plt.present() # Look at a variação explicada print(f”Variância explicada por cada componente: {pca.explained_variance_ratio_}”) print(f”Variância whole capturada: {sum(pca.explained_variance_ratio_):.2%}”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | de aprender.decomposição importar PCA de aprender.conjuntos de dados importar carregar_íris importar matplotlib.pyplot como plt # Carrega dados de amostra íris = carregar_íris() X = íris.dados sim = íris.alvo # Aplicar PCA, reduzindo para 2 dimensões para visualização PCA = PCA(n_componentes=2) X_pca = PCA.fit_transform(X) # Visualize o resultado plt.figura(tamanho do figo=(8, 6)) espalhar = plt.espalhar(X_pca(:, 0), X_pca(:, 1), c=sim, cmap=‘viridis’, bordacor=‘ok’, é=70) plt.rótulo x(‘Componente Principal 1’) plt.rótulo(‘Componente Principal 2’) plt.título(‘PCA do conjunto de dados Iris’) plt.barra de cores(espalhar, rótulo=‘Espécies de Íris’) plt.mostrar() # Look at a variação explicada imprimir(f“Variância explicada por cada componente: {pca.explained_variance_ratio_}”) imprimir(f“Variação whole capturada: {sum(pca.explained_variance_ratio_):.2%}”) |
Este código reduz o conjunto de dados Iris quadridimensional para 2 dimensões. O gráfico de dispersão resultante mostra os dados espalhados ao longo dos eixos de variância máxima e o explained_variance_ratio_ informa quanta informação foi preservada.
Saída de código:

Variância explicada por cada componente: (0,92461872 0,05306648) Variância whole capturada: 97,77%
Variância explicado por cada componente: (0,92461872 0,05306648) Complete variação capturado: 97,77% |
Quando usar PCA
- Quando você deseja reduzir recursos antes dos modelos de aprendizado de máquina
- Quando você deseja remover o ruído
- Quando você quiser acelerar o treinamento
- Quando você deseja entender os padrões globais
Compreendendo a incorporação estocástica de vizinho t-distribuída (t-SNE)
t-SNE é uma técnica não linear projetada quase inteiramente para visualização. Ele funciona modelando semelhanças entre pares entre pontos no espaço de alta dimensão e, em seguida, encontrando uma representação de baixa dimensão (2D ou 3D) onde essas semelhanças são melhor mantidas. É particularmente bom para revelar estruturas locais como aglomerados que podem estar ocultos em dimensões elevadas.
Principais vantagens e quando usar o t-SNE
- Visualizando Clusters: É ótimo para criar gráficos intuitivos e ricos em clusters a partir de dados complexos, como incorporações de palavras, dados de expressão genética ou imagens.
- Revelando variedades não lineares: Ele pode revelar estruturas curvas detalhadas que métodos lineares como o PCA não conseguem.
- Foco em relacionamentos locais: Seu design garante que pontos próximos no espaço unique permaneçam próximos na incorporação
Limitações Críticas
- Os eixos não são interpretáveis: Os eixos do gráfico t-SNE (t-SNE1, t-SNE2) não têm significado elementary. Apenas as distâncias relativas e agrupamento de pontos são informativos
- Não examine clusters entre gráficos: A escala e as distâncias entre os clusters em um gráfico t-SNE não são comparáveis àquelas em outro gráfico de uma execução ou conjunto de dados diferente
- Perplexidade é a chave: Este é o parâmetro mais importante. Equilibra a atenção entre a estrutura native e international (intervalo típico: 5–50). Você deve experimentar isso
Implementando t-SNE com Scikit-Be taught
from sklearn.datasets import load_iris from sklearn.manifold import TSNE import matplotlib.pyplot as plt # Carrega dados de amostra iris = load_iris() X = iris.information y = iris.goal # Aplicar t-SNE. Observe o parâmetro chave ‘perplexidade’. tsne = TSNE(n_components=2, perplexity=30, random_state=42, init=”pca”) X_tsne = tsne.fit_transform(X) # Visualize o resultado plt.determine(figsize=(8, 6)) scatter = plt.scatter(X_tsne(:, 0), X_tsne(:, 1), c=y, cmap=’viridis’, edgecolor=”ok”, s=70) plt.xlabel(‘t-SNE Part 1 (sem significado intrínseco)’) plt.ylabel(‘t-SNE Part 2 (sem significado intrínseco)’) plt.title(‘t-SNE of Iris Dataset (Perplexity=30)’) plt.colorbar(scatter, label=”Iris Species”) plt.present()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | de aprender.conjuntos de dados importar carregar_íris de aprender.múltiplo importar TSNE importar matplotlib.pyplot como plt # Carrega dados de amostra íris = carregar_íris() X = íris.dados sim = íris.alvo # Aplique t-SNE. Observe o parâmetro chave ‘perplexidade’. tsne = TSNE(n_componentes=2, perplexidade=30, estado_aleatório=42, iniciar=‘pca’) X_tsne = tsne.fit_transform(X) # Visualize o resultado plt.figura(tamanho do figo=(8, 6)) espalhar = plt.espalhar(X_tsne(:, 0), X_tsne(:, 1), c=sim, cmap=‘viridis’, bordacor=‘ok’, é=70) plt.rótulo x(‘t-SNE Componente 1 (sem significado intrínseco)’) plt.rótulo(‘t-SNE Componente 2 (sem significado intrínseco)’) plt.título(‘t-SNE do conjunto de dados Iris (Perplexidade = 30)’) plt.barra de cores(espalhar, rótulo=‘Espécies de Íris’) plt.mostrar() |
Este código cria uma visualização t-SNE. Contexto init="pca" (o padrão) usa uma inicialização PCA para melhor estabilidade. Observe que os eixos são deliberadamente rotulados como não tendo significado intrínseco.
Saída:

Quando usar t-SNE
- Quando você deseja explorar clusters
- Quando você precisa visualizar embeddings
- Quando você deseja revelar padrões ocultos
- Não é para engenharia de recursos
Um fluxo de trabalho prático
Uma prática recomendada poderosa e comum é combinar PCA e t-SNE. Isso usa os pontos fortes de ambos:
- Primeiro, use o PCA para reduzir dados de dimensões muito altas (por exemplo, mais de 1.000 recursos) para um número intermediário de dimensões (por exemplo, 50). Isso take away o ruído e acelera drasticamente o cálculo subsequente do t-SNE
- Em seguida, aplique t-SNE à saída do PCA para obter sua visualização 2D closing
Abordagem híbrida: PCA seguido por t-SNE
from sklearn.decomposition import PCA # Etapa 1: Reduza para 50 dimensões com PCA pca_for_tsne = PCA(n_components=50) X_pca_reduced = pca_for_tsne.fit_transform(X_high_dim) # Suponha que X_high_dim sejam seus dados originais # Etapa 2: Aplique t-SNE aos dados reduzidos por PCA X_tsne_final = TSNE(n_componentes=2, perplexidade=40, random_state=42).fit_transform(X_pca_reduced)
de aprender.decomposição importar PCA # Etapa 1: Reduza para 50 dimensões com PCA pca_for_tsne = PCA(n_componentes=50) X_pca_reduzido = pca_for_tsne.fit_transform(X_high_dim) # Suponha que X_high_dim sejam seus dados originais # Etapa 2: Aplicar t-SNE aos dados reduzidos por PCA X_tsne_final = TSNE(n_componentes=2, perplexidade=40, estado_aleatório=42).fit_transform(X_pca_reduzido) |
O exemplo acima demonstra o uso do t-SNE para reduzir para 2D para visualização e como o pré-processamento do PCA pode tornar o t-SNE mais rápido e estável.
Conclusão
A escolha da ferramenta certa se resume ao seu objetivo principal:
- Use o PCA quando precisar de um método eficiente, determinístico e interpretável para redução de dimensionalidade de uso geral, extração de recursos ou como uma etapa de pré-processamento para outro modelo. É a sua primeira visão da estrutura de dados international.
- Use o t-SNE quando seu objetivo for a exploração puramente visible e a descoberta de clusters em dados complexos e não lineares. Esteja preparado para ajustar os parâmetros e nunca interpretar o gráfico quantitativamente
Comece com PCA. Se revelar tendências lineares claras, pode ser suficiente. Se você suspeitar de clusters ocultos, mude para t-SNE (ou use a abordagem híbrida) para revelá-los.
Finalmente, embora o PCA e o t-SNE sejam fundamentais, esteja ciente das alternativas modernas, como Aproximação e Projeção de Variedades Uniformes (UMAP). O UMAP costuma ser mais rápido que o t-SNE e foi projetado para preservar mais a estrutura international e, ao mesmo tempo, capturar detalhes locais. Tornou-se uma escolha padrão standard para muitas tarefas de visualização, continuando a evolução de como vemos nossos dados.
Espero que este artigo forneça uma estrutura clara para a escolha entre PCA e t-SNE. A melhor maneira de construir esse entendimento é experimentar ambos os métodos em conjuntos de dados que você conhece bem, observando como suas diferentes naturezas moldam a história que seus dados contam.
