Redução de dimensão com PCA

Unsupervised Learning em Python

Benjamin Wilson

Director of Research at lateral.io

Redução de dimensão

  • Mesmos dados com menos features
  • Parte importante de pipelines de ML
  • Pode ser feita com PCA
Unsupervised Learning em Python

Redução de dimensão com PCA

  • Componentes do PCA em ordem decrescente de variância
  • Assume que baixa variância é "ruído"
  • ... e alta variância é informativa

Gráfico de barras: nº da componente do PCA vs variância; linha vertical entre 1 e 2; seta à esquerda informativa e à direita ruidosa

Unsupervised Learning em Python

Redução de dimensão com PCA

  • Defina quantas componentes manter
  • Ex.: PCA(n_components=2)
  • Mantém as 2 primeiras componentes
  • Dimensão intrínseca é uma boa escolha
Unsupervised Learning em Python

Redução de dimensão do conjunto iris

  • samples = array com medidas do iris (4 features)
  • species = lista com códigos das espécies
from sklearn.decomposition import PCA

pca = PCA(n_components=2)
pca.fit(samples)
PCA(n_components=2)
transformed = pca.transform(samples)
print(transformed.shape)
(150, 2)
Unsupervised Learning em Python

Conjunto Iris em 2 dimensões

  • O PCA reduziu para 2 dimensões
  • Mantém as 2 componentes com maior variância
  • Info essencial preservada: espécies seguem distintas
import matplotlib.pyplot as plt
xs = transformed[:,0]
ys = transformed[:,1]
plt.scatter(xs, ys, c=species)
plt.show()

Gráfico de dispersão do PCA feito no conjunto Iris

Unsupervised Learning em Python

Redução de dimensão com PCA

  • Descarta componentes de baixa variância
  • Assume que alta variância é informativa
  • Em geral funciona bem (ex.: iris)
Unsupervised Learning em Python

Matrizes de frequência de palavras

  • Linhas = documentos, colunas = palavras
  • Entradas medem a presença de cada palavra em cada documento
  • ... medido com "tf-idf" (veremos já)

Matriz de frequência de palavras

Unsupervised Learning em Python

Arrays esparsos e csr_matrix

  • "Esparsa": a maioria das entradas é zero
  • Use scipy.sparse.csr_matrix em vez de array do NumPy
  • csr_matrix guarda só entradas não zero (economiza espaço!)

Matriz de frequência de palavras

Unsupervised Learning em Python

TruncatedSVD e csr_matrix

  • PCA do scikit-learn não suporta csr_matrix
  • Use TruncatedSVD do scikit-learn
  • Faz a mesma transformação
from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD(n_components=3)
model.fit(documents)  # documents is csr_matrix
transformed = model.transform(documents)
Unsupervised Learning em Python

Vamos praticar!

Unsupervised Learning em Python

Preparing Video For Download...