Reducción de dimensión con PCA

Aprendizaje no supervisado en Python

Benjamin Wilson

Director of Research at lateral.io

Reducción de dimensión

  • Representa los mismos datos con menos características
  • Parte clave de los flujos de ML
  • Se puede hacer con PCA
Aprendizaje no supervisado en Python

Reducción de dimensión con PCA

  • Las componentes de PCA van en orden decreciente de varianza
  • Supone que la baja varianza es «ruido»
  • ... y la alta varianza es informativa

Gráfico de barras: n.º de componente vs varianza; línea entre 1 y 2; flecha izq. «informativa», dcha. «ruidosa»

Aprendizaje no supervisado en Python

Reducción de dimensión con PCA

  • Indica cuántas componentes conservar
  • Ej.: PCA(n_components=2)
  • Conserva las 2 primeras componentes
  • La dimensión intrínseca suele ser una buena elección
Aprendizaje no supervisado en Python

Reducción de dimensión del conjunto iris

  • samples = array con medidas de iris (4 características)
  • species = lista con los números de especie
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)
Aprendizaje no supervisado en Python

Conjunto Iris en 2 dimensiones

  • PCA redujo la dimensión a 2
  • Conservó las 2 componentes con mayor varianza
  • La info clave se mantiene: las especies siguen separadas
import matplotlib.pyplot as plt
xs = transformed[:,0]
ys = transformed[:,1]
plt.scatter(xs, ys, c=species)
plt.show()

Gráfico de dispersión de PCA en el conjunto Iris

Aprendizaje no supervisado en Python

Reducción de dimensión con PCA

  • Descarta componentes de baja varianza
  • Supone que la alta varianza es informativa
  • Suele cumplirse en la práctica (p. ej., en iris)
Aprendizaje no supervisado en Python

Matrices de frecuencia de palabras

  • Filas = documentos; columnas = palabras
  • Las celdas miden la presencia de cada palabra por documento
  • ... medida con «tf-idf» (más adelante)

Matriz de frecuencias de palabras

Aprendizaje no supervisado en Python

Arrays dispersos y csr_matrix

  • «Dispersa»: la mayoría de entradas son cero
  • Puedes usar scipy.sparse.csr_matrix en vez de un array de NumPy
  • csr_matrix guarda solo los no ceros (ahorra espacio)

Matriz de frecuencias de palabras

Aprendizaje no supervisado en Python

TruncatedSVD y csr_matrix

  • PCA de scikit-learn no admite csr_matrix
  • Usa TruncatedSVD de scikit-learn
  • Aplica la misma transformación
from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD(n_components=3)
model.fit(documents)  # documents is csr_matrix
transformed = model.transform(documents)
Aprendizaje no supervisado en Python

¡Vamos a practicar!

Aprendizaje no supervisado en Python

Preparing Video For Download...