Réduction de dimension avec la PCA

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Réduction de dimension

  • Représente les mêmes données avec moins de caractéristiques
  • Élément clé des pipelines de Machine Learning
  • Réalisable avec la PCA
Unsupervised Learning in Python

Réduction de dimension avec la PCA

  • Les composantes PCA sont par variance décroissante
  • Suppose que la faible variance est du « bruit »
  • … et que la forte variance est informative

Diagramme à barres : numéro de caractéristique PCA vs variance, ligne verticale entre 1 et 2, flèche gauche « informative », flèche droite « bruyante »

Unsupervised Learning in Python

Réduction de dimension avec la PCA

  • Indiquer combien de caractéristiques conserver
  • P. ex. PCA(n_components=2)
  • Conserve les 2 premières composantes PCA
  • La dimension intrinsèque est un bon choix
Unsupervised Learning in Python

Réduction de dimension du jeu de données iris

  • samples = tableau des mesures d'iris (4 caractéristiques)
  • species = liste des numéros d'espèces d'iris
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 in Python

Jeu de données Iris en 2 dimensions

  • La PCA a réduit la dimension à 2
  • A gardé les 2 composantes PCA à plus forte variance
  • L'essentiel est préservé : les espèces restent distinctes
import matplotlib.pyplot as plt
xs = transformed[:,0]
ys = transformed[:,1]
plt.scatter(xs, ys, c=species)
plt.show()

Nuage de points de la PCA appliquée au jeu de données Iris

Unsupervised Learning in Python

Réduction de dimension avec la PCA

  • Écarte les composantes PCA à faible variance
  • Suppose que les fortes variances sont informatives
  • Hypothèse souvent vérifiée en pratique (p. ex. pour iris)
Unsupervised Learning in Python

Tableaux de fréquences de mots

  • Les lignes sont des documents, les colonnes des mots
  • Les valeurs mesurent la présence de chaque mot par document
  • … mesurée avec « tf-idf » (à voir plus tard)

Tableau de fréquences de mots

Unsupervised Learning in Python

Tableaux creux et csr_matrix

  • « Creux » : la plupart des valeurs sont nulles
  • Utiliser scipy.sparse.csr_matrix plutôt qu'un tableau NumPy
  • csr_matrix ne retient que les valeurs non nulles (gain d'espace !)

Tableau de fréquences de mots

Unsupervised Learning in Python

TruncatedSVD et csr_matrix

  • PCA de scikit-learn ne gère pas csr_matrix
  • Utiliser plutôt TruncatedSVD de scikit-learn
  • Réalise la même transformation
from sklearn.decomposition import TruncatedSVD
model = TruncatedSVD(n_components=3)
model.fit(documents)  # documents is csr_matrix
transformed = model.transform(documents)
Unsupervised Learning in Python

Passons à la pratique !

Unsupervised Learning in Python

Preparing Video For Download...