t-SNE
Fonctions :
-
TSNE()
La fonction TSNE() (t-Distributed Stochastic Neighbor Embedding) est une technique de réduction de dimensionnalité non linéaire, principalement utilisée pour visualiser des données à haute dimension en 2D ou 3D. Elle préserve les relations locales entre les points, permettant de révéler des structures complexes et des regroupements dans les données.
Importation :
from sklearn.manifold import TSNE
Attributs :
Paramètre Type Description Valeur par défaut n_components
int Nombre de dimensions dans l'espace réduit (généralement 2 ou 3 pour visualisation). 2
perplexity
float Mesure liée au nombre effectif de voisins pris en compte. Contrôle l’équilibre entre préservation des structures locales et globales. 30.0
early_exaggeration
float Facteur d’exagération pour renforcer la séparation initiale entre les points pendant l’optimisation. 12.0
learning_rate
float Taux d’apprentissage pour l’optimisation (gradient descent). 200.0
n_iter
int Nombre total d’itérations de l’algorithme d’optimisation. 1000
n_iter_without_progress
int Nombre d’itérations sans amélioration du coût avant arrêt anticipé. 300
min_grad_norm
float Seuil minimal pour le gradient afin de considérer la convergence. 1e-7
metric
str ou callable Métrique utilisée pour calculer la distance entre les points d’entrée. "euclidean"
init
str ou ndarray Méthode d’initialisation des points dans l’espace réduit ("random", "pca" ou un tableau numpy). "random"
verbose
int Niveau de verbosité pour afficher les informations durant l’exécution. 0
random_state
int, RandomState instance ou None Graine aléatoire pour assurer la reproductibilité. None
method
str Méthode d’approximation : "barnes_hut" (rapide) ou "exact". "barnes_hut"
angle
float Angle d’approximation pour la méthode "barnes_hut" (précision vs vitesse). 0.5
Exemple de code :
from sklearn.manifold import TSNE from sklearn.datasets import load_iris import matplotlib.pyplot as plt # Charger un jeu de données exemple (Iris) data = load_iris() X = data.data y = data.target # Créer l'objet TSNE et réduire à 2 dimensions tsne = TSNE(n_components=2, random_state=42) # Appliquer TSNE sur les données X_embedded = tsne.fit_transform(X) # Affichage des points dans le nouvel espace 2D plt.figure(figsize=(8,6)) for label in set(y): plt.scatter( X_embedded[y == label, 0], X_embedded[y == label, 1], label=data.target_names[label] ) plt.legend() plt.title("Projection TSNE du jeu de données Iris") plt.xlabel("Composante 1") plt.ylabel("Composante 2") plt.show()
Explication du code :
from sklearn.manifold import TSNE
importe la classe TSNE du module de réduction de dimension de scikit-learn, utilisée pour projeter des données en espace de dimension plus faible en conservant la structure locale.from sklearn.datasets import load_iris
importe la fonction load_iris qui charge le célèbre jeu de données Iris (fleurs avec 4 caractéristiques et 3 classes).import matplotlib.pyplot as plt
importe la bibliothèque matplotlib pour créer des graphiques.Chargement des données Iris
data = load_iris()
charge les données Iris dans un objetdata
.X = data.data
extrait les caractéristiques (4 dimensions).y = data.target
récupère les étiquettes/classes (3 classes).Création de l’objet TSNE
tsne = TSNE(n_components=2, random_state=42)
crée un objet TSNE qui réduira les données à 2 dimensions pour faciliter la visualisation. Le paramètrerandom_state
garantit la reproductibilité.Application de TSNE
X_embedded = tsne.fit_transform(X)
ajuste TSNE aux données d’entréeX
et calcule la projection 2D dansX_embedded
.Visualisation des données projetées
plt.figure(figsize=(8,6))
crée une figure pour le graphique.for label in set(y):
itère sur chaque classe unique pour afficher ses points distinctement.plt.scatter(X_embedded[y == label, 0], X_embedded[y == label, 1], label=data.target_names[label])
affiche les points projetés en 2D correspondant à la classelabel
avec une couleur spécifique.plt.legend()
ajoute la légende avec le nom des classes.plt.title("Projection TSNE du jeu de données Iris")
ajoute un titre au graphique.plt.xlabel("Composante 1")
etplt.ylabel("Composante 2")
ajoutent les étiquettes des axes.plt.show()
affiche la figure. Cette visualisation montre comment TSNE réduit les 4 dimensions des données Iris à 2 dimensions tout en regroupant les points par classe, facilitant ainsi l’interprétation visuelle des clusters naturels dans les données.