Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Utilisation du Clustering sur des Données Réelles | Algorithmes de Regroupement de Base
Analyse de Cluster
course content

Contenu du cours

Analyse de Cluster

Analyse de Cluster

1. Qu'est-ce Que le Clustering?
2. Algorithmes de Regroupement de Base
3. Comment Choisir le Meilleur Modèle ?

book
Utilisation du Clustering sur des Données Réelles

Nous avons considéré 4 algorithmes de clustering et examiné les principes de leur fonctionnement sur des ensembles de données jouets. Maintenant, essayons d'utiliser ces méthodes de clustering pour résoudre le problème réel avec des données réelles.

Nous utiliserons le jeu de données Iris qui se compose de 50 échantillons de chacune des trois espèces d'Iris (Iris setosa, Iris virginica et Iris versicolor); quatre caractéristiques ont été mesurées pour chaque échantillon : la longueur et la largeur des sépales et des pétales, en centimètres. La tâche consiste à déterminer le type d'Iris en utilisant ces caractéristiques : nous fournirons un clustering et supposerons que chaque cluster représente l'une des espèces d'Iris.

Pour fournir des visualisations compréhensibles, nous n'utiliserons que deux caractéristiques pour le clustering : la longueur des sépales et la longueur des pétales. Regardons nos données :

1234567891011
from sklearn.datasets import load_iris import numpy as np import matplotlib.pyplot as plt X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] plt.scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') plt.title('Iris data') plt.xlabel('Length of sepals') plt.ylabel('Length of petals') plt.show()
copy

Utilisons K-means pour fournir un regroupement et comparer les résultats avec des données réelles :

123456789101112131415161718192021
from sklearn.datasets import load_iris from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] kmeans = KMeans(n_clusters=3).fit(X_iris) fig, axes = plt.subplots(1, 2) fig.set_size_inches(10, 5) axes[0].scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') axes[0].set_title('Real clusters') axes[1].scatter(X_iris[:, 0], X_iris[:, 1], c = kmeans.labels_, cmap='tab20b') axes[1].set_title('Clusters with K-means') plt.setp(axes[0], xlabel='Length of sepals') plt.setp(axes[0], ylabel='Length of petals') plt.setp(axes[1], xlabel='Length of sepals') plt.setp(axes[1], ylabel='Length of petals')
copy

Essayons maintenant l'algorithme agglomératif :

1234567891011121314151617
from sklearn.datasets import load_iris from sklearn.cluster import AgglomerativeClustering import numpy as np import matplotlib.pyplot as plt X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] agglomerative = AgglomerativeClustering(n_clusters = 3).fit(X_iris) fig, axes = plt.subplots(1, 2) fig.set_size_inches(10, 5) axes[0].scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') axes[0].set_title('Real clusters') axes[1].scatter(X_iris[:, 0], X_iris[:, 1], c = agglomerative.labels_, cmap='tab20b') axes[1].set_title('Clusters with Agglomerative') plt.setp(axes[0], xlabel='Length of sepals') plt.setp(axes[0], ylabel='Length of petals') plt.setp(axes[1], xlabel='Length of sepals') plt.setp(axes[1], ylabel='Length of petals')
copy

Note

Nous avons mentionné dans le chapitre sur le Clustering Agglomératif que nous pouvons définir manuellement le nombre de clusters. Ici, nous avons utilisé cette capacité car nous avons des informations sur le nombre de clusters cibles (3 espèces d'Iris = 3 clusters).

Utilisation de l'algorithme de clustering Mean shift :

1234567891011121314151617
from sklearn.datasets import load_iris from sklearn.cluster import MeanShift import numpy as np import matplotlib.pyplot as plt X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] mean_shift= MeanShift(bandwidth=2).fit(X_iris) fig, axes = plt.subplots(1, 2) fig.set_size_inches(10, 5) axes[0].scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') axes[0].set_title('Real clusters') axes[1].scatter(X_iris[:, 0], X_iris[:, 1], c = mean_shift.labels_, cmap='tab20b') axes[1].set_title('Clusters with Mean shift') plt.setp(axes[0], xlabel='Length of sepals') plt.setp(axes[0], ylabel='Length of petals') plt.setp(axes[1], xlabel='Length of sepals') plt.setp(axes[1], ylabel='Length of petals')
copy

Enfin, essayons d'utiliser DBSCAN :

1234567891011121314151617
from sklearn.datasets import load_iris from sklearn.cluster import DBSCAN import numpy as np import matplotlib.pyplot as plt X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] dbscan = DBSCAN(eps=1, min_samples=10).fit(X_iris) fig, axes = plt.subplots(1, 2) fig.set_size_inches(10, 5) axes[0].scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') axes[0].set_title('Real clusters') axes[1].scatter(X_iris[:, 0], X_iris[:, 1], c = dbscan.labels_, cmap='tab20b') axes[1].set_title('Clusters with DBSCAN') plt.setp(axes[0], xlabel='Length of sepals') plt.setp(axes[0], ylabel='Length of petals') plt.setp(axes[1], xlabel='Length of sepals') plt.setp(axes[1], ylabel='Length of petals')
copy

Remarque

Dans le code ci-dessus, nous avons défini manuellement les paramètres pour les algorithmes (eps, min_samples pour DBSCAN, et bandwidth pour Mean shift). Dans les tâches réelles, pour déterminer les valeurs optimales de ces paramètres, il est nécessaire d'utiliser des techniques supplémentaires (validation croisée, recherche en grille, etc.).

Nous pouvons voir que grâce aux visualisations, les algorithmes K-means et Agglomerative peuvent résoudre la tâche. En même temps, Mean shift et DBSCAN ne peuvent pas extraire 3 clusters différents.

Ainsi, nous pouvons conclure que pour chaque tâche individuelle, une approche individuelle est nécessaire : le choix d'un algorithme, la sélection des paramètres, etc. De plus, il est nécessaire de définir certaines métriques avec lesquelles nous pouvons évaluer la qualité du clustering. L'utilisation de graphiques de clusters n'est pas le meilleur indicateur pour deux raisons :

  1. Les graphiques ne pourront pas montrer adéquatement la distribution en clusters pour les données multivariées (les données avec plus de 3 caractéristiques ne peuvent pas être visualisées correctement);
  2. Les graphiques peuvent montrer des algorithmes qui donnent de très mauvais résultats (comme DBSCAN et Mean shift dans l'exemple ci-dessus). Mais si les résultats sont bons, il est très difficile de comprendre où la qualité du clustering est meilleure (comme K-means et Agglomerative dans l'exemple ci-dessus).

Nous parlerons de l'évaluation de la qualité du clustering dans la section suivante.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 8
We're sorry to hear that something went wrong. What happened?
some-alt