Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Évaluation Externe | Comment Choisir le Meilleur Modèle ?
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
Évaluation Externe

L'évaluation externe pour les algorithmes de clustering est une méthode d'évaluation de la performance d'un algorithme de clustering en comparant ses résultats à un ensemble connu d'étiquettes de classe ou de vérité terrain. En d'autres termes, les clusters de l'algorithme sont comparés à un ensemble d'étiquettes préexistantes créées par des experts ou basées sur des connaissances du domaine.

Les métriques externes les plus couramment utilisées

L'indice de Rand (RI) mesure la similarité entre deux clusterings ou partitions et est souvent utilisé comme métrique d'évaluation externe dans le clustering. L'indice de Rand mesure le pourcentage de paires de points de données assignés au même cluster à la fois dans les clusterings prédit et réel, normalisé par le nombre total de paires de points de données.

L'indice de Rand est calculé comme suit :

  • Soit n le nombre total de points de données ;
  • Soit a le nombre de paires de points de données assignés au même cluster à la fois dans les clusterings prédit et réel ;
  • Soit b le nombre de paires de points de données assignés à des clusters différents à la fois dans les clusterings prédit et réel.

L'indice de Rand est alors donné par 2*(a+b)/ (n*(n-1)).

123456789101112131415161718192021222324252627282930313233
from sklearn.metrics import rand_score from sklearn.cluster import KMeans from sklearn.datasets import make_moons, make_blobs, make_circles import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Creating subplots for visualization fig, axes = plt.subplots(1, 3) fig.set_size_inches(10, 5) # Create circles dataset X_circles, y = make_circles(n_samples=500, factor=0.2) # Provide K-means clustering clustering = KMeans(n_clusters=2).fit(X_circles) predicted_circles = clustering.predict(X_circles) # Provide visualization and show RI for circles dataset axes[0].scatter(X_circles[:, 0], X_circles[:, 1], c=clustering.labels_, cmap='tab20b') axes[0].set_title('RI is: '+ str(round(rand_score(y, predicted_circles), 3))) X_blobs, y = make_blobs(n_samples=500, centers=2) clustering = KMeans(n_clusters=2).fit(X_blobs) predicted_blobs = clustering.predict(X_blobs) # Provide visualization and show RI for blobs dataset axes[1].scatter(X_blobs[:, 0], X_blobs[:, 1], c=clustering.labels_, cmap='tab20b') axes[1].set_title('RI is: '+ str(round(rand_score(y, predicted_blobs), 3))) X_moons, y = make_moons(n_samples=500) clustering = KMeans(n_clusters=2).fit(X_moons) predicted_moons = clustering.predict(X_moons) # Provide visualization and show RI for moons dataset axes[2].scatter(X_moons[:, 0], X_moons[:, 1], c=clustering.labels_, cmap='tab20b') axes[2].set_title('RI is: '+ str(round(rand_score(y, predicted_moons), 3)))
copy

L'indice de Rand peut varier entre 0 et 1, où 0 indique que les deux groupements sont complètement différents, et 1 indique que les deux groupements sont identiques.


Information Mutuelle (MI) mesure la quantité d'information partagée par les groupements prédits et réels basée sur le concept d'entropie. Nous ne considérerons pas comment cette métrique est calculée, car cela dépasse le cadre du cours de niveau débutant.

1234567891011121314151617181920212223242526272829303132
from sklearn.metrics import mutual_info_score from sklearn.cluster import KMeans from sklearn.datasets import make_moons, make_blobs, make_circles import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Create subplots for visualizations fig, axes = plt.subplots(1, 3) fig.set_size_inches(10 ,5) X_circles, y = make_circles(n_samples=500, factor=0.2) clustering = KMeans(n_clusters=2).fit(X_circles) predicted_circles = clustering.predict(X_circles) # Provide visualization and show MI for circles dataset axes[0].scatter(X_circles[:, 0], X_circles[:, 1], c=clustering.labels_, cmap='tab20b') axes[0].set_title('MI is: '+ str(round(mutual_info_score(y, predicted_circles), 3))) X_blobs, y = make_blobs(n_samples=500, centers=2) clustering = KMeans(n_clusters=2).fit(X_blobs) predicted_blobs = clustering.predict(X_blobs) # Provide visualization and show MI for blobs dataset axes[1].scatter(X_blobs[:, 0], X_blobs[:, 1], c=clustering.labels_, cmap='tab20b') axes[1].set_title('MI is: '+ str(round(mutual_info_score(y, predicted_blobs), 3))) X_moons, y = make_moons(n_samples=500) clustering = KMeans(n_clusters=2).fit(X_moons) predicted_moons = clustering.predict(X_moons) # Provide visualization and show MI for moons dataset axes[2].scatter(X_moons[:, 0], X_moons[:, 1], c=clustering.labels_, cmap='tab20b') axes[2].set_title('MI is: '+ str(round(mutual_info_score(y, predicted_moons), 3)))
copy

L'Information Mutuelle varie entre 0 et 1, où 0 indique que le groupement prédit est complètement différent du groupement réel, et 1 indique que le groupement prédit est identique au groupement réel. De plus, sur la base des exemples ci-dessus, nous pouvons dire que cette métrique est bien meilleure pour détecter un mauvais groupement que l'indice de Rand.


Homogénéité mesure le degré auquel chaque groupe contient uniquement des points de données appartenant à une seule classe ou catégorie basée sur l'entropie conditionnelle. Tout comme avec l'information mutuelle, nous ne considérerons pas le principe de calcul de cette métrique.

12345678910111213141516171819202122232425262728293031
from sklearn.metrics import homogeneity_score from sklearn.cluster import KMeans from sklearn.datasets import make_moons, make_blobs, make_circles import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') fig, axes = plt.subplots(1, 3) fig.set_size_inches(10, 5) X_circles, y = make_circles(n_samples=500, factor=0.2) clustering = KMeans(n_clusters=2).fit(X_circles) predicted_circles = clustering.predict(X_circles) # Provide visualization and show homogeneity for circles dataset axes[0].scatter(X_circles[:, 0], X_circles[:, 1], c=clustering.labels_, cmap='tab20b') axes[0].set_title('Homogeneity is: '+ str(round(homogeneity_score(y, predicted_circles), 3))) X_blobs, y = make_blobs(n_samples=500, centers=2) clustering = KMeans(n_clusters=2).fit(X_blobs) predicted_blobs = clustering.predict(X_blobs) # Provide visualization and show homogeneity for blobs dataset axes[1].scatter(X_blobs[:, 0], X_blobs[:, 1], c=clustering.labels_, cmap='tab20b') axes[1].set_title('Homogeneity is: '+ str(round(homogeneity_score(y, predicted_blobs), 3))) X_moons, y = make_moons(n_samples=500) clustering = KMeans(n_clusters=2).fit(X_moons) predicted_moons = clustering.predict(X_moons) # Provide visualization and show homogeneity for moons dataset axes[2].scatter(X_moons[:, 0], X_moons[:, 1], c=clustering.labels_, cmap='tab20b') axes[2].set_title('Homogeneity is: '+ str(round(homogeneity_score(y, predicted_moons), 3)))
copy

Une solution de clustering est considérée comme hautement homogène si tous les points de données appartenant à la même vraie classe ou catégorie sont regroupés dans le même cluster.
En d'autres termes, l'homogénéité mesure dans quelle mesure un algorithme de clustering attribue des points de données aux bons clusters en fonction de leur vraie classe ou catégorie. Le score d'homogénéité varie de 0 à 1, 1 indiquant une homogénéité parfaite.

L'homogénéité est la meilleure de toutes les métriques considérées : elle détermine aussi bien un bon qu'un mauvais clustering, comme montré dans l'exemple ci-dessus.

Pouvons-nous utiliser des métriques d'évaluation externes si nous n'avons pas d'informations sur le partitionnement réel des données en clusters ?

Pouvons-nous utiliser des métriques d'évaluation externes si nous n'avons pas d'informations sur le partitionnement réel des données en clusters ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

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