Méthode K-Means Elbow et analyse de silhouette avec Yellowbrick et Scikit-Learn PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Méthode K-Means Elbow et analyse de silhouette avec Yellowbrick et Scikit-Learn

Introduction

K-Means est l'un des algorithmes de clustering les plus populaires. En ayant des points centraux à un cluster, il regroupe d'autres points en fonction de leur distance à ce point central.

Un inconvénient de K-Means est de devoir choisir le nombre de clusters, K, avant d'exécuter l'algorithme qui regroupe les points.

Si vous souhaitez lire un guide détaillé sur le clustering K-Means, consultez « Regroupement K-Means avec Scikit-Learn ».

Méthode du coude et analyse de la silhouette

Les techniques les plus couramment utilisées pour choisir le nombre de K sont les Méthode du coude et par Analyse des silhouettes.

Pour faciliter le choix de Ks, la brique jaune La bibliothèque termine le code avec des boucles for et un tracé que nous écrirons habituellement en 4 lignes de code.

Pour installer Yellowbrick directement depuis un notebook Jupyter, exécutez :

! pip install yellowbrick

Voyons comment cela fonctionne pour un ensemble de données familier qui fait déjà partie de Scikit-learn, le Iris jeu de données.

La première étape consiste à importer le jeu de données, KMeans ainsi que yellowbrick bibliothèques et chargez les données :

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer

iris = load_iris()

Remarquez ici, nous importons le KElbowVisualizer ainsi que SilhouetteVisualizer De yellowbrick.cluster, ce sont les modules que nous utiliserons pour visualiser les résultats Elbow et Silhouette !

Après avoir chargé le jeu de données, dans le data clé du groupe (un type de données qui est une extension d'un dictionnaire) sont les valeurs des points que nous voulons regrouper. Si vous voulez savoir ce que représentent les chiffres, jetez un œil à iris['feature_names'].

On sait que l'ensemble de données Iris contient trois types d'iris : 'versicolor', 'virginica' et 'setosa'. Vous pouvez également inspecter les classes dans iris['target_names'] vérifier.

Nous avons donc 4 fonctionnalités à regrouper et elles doivent être séparées en 3 clusters différents en fonction de ce que nous savons déjà. Voyons si nos résultats avec la méthode du coude et l'analyse de la silhouette corroborent cela.

Tout d'abord, nous allons sélectionner les valeurs des fonctionnalités :

print(iris['feature_names']) 
print(iris['target_names']) 

X = iris['data']

Ensuite, nous pouvons créer un KMeans modèle, un KElbowVisualizer() instance qui recevra ce modèle avec le nombre de ks pour lequel une métrique sera calculée, dans ce cas à partir de Entre 2 et 11 Ks.

Après cela, nous adaptons le visualiseur aux données en utilisant fit() et afficher le tracé avec show(). Si une métrique n'est pas spécifiée, le visualiseur utilise la distorsion métrique, qui calcule la somme des distances au carré de chaque point à son centre assigné :

model = KMeans(random_state=42)

elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)    
elb_visualizer.show()  

Maintenant, nous avons déjà un Coude de score de distorsion pour le clustering KMeans tracer avec une ligne verticale marquant ce qui serait le meilleur nombre de ks, dans ce cas, 4.

Il semble que la méthode du coude avec une métrique de distorsion n'était pas le meilleur choix si nous ne connaissions pas le nombre réel de clusters. Est-ce que Silhouette indiquera également qu'il y a 4 clusters ? Pour répondre à cela, il suffit de répéter le dernier code avec un modèle à 4 clusters et un objet visualiseur différent :

model_4clust = KMeans(n_clusters = 4, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

score de silhouette pour k signifie cluster en utilisant la méthode du coude

Le code affiche un Diagramme de silhouette du regroupement de KMeans pour 150 échantillons dans 4 centres. Pour analyser ces clusters, nous devons regarder la valeur du coefficient de silhouette (ou score), sa meilleure valeur est plus proche de 1. La valeur moyenne que nous avons est 0.5, marqué par la ligne verticale, et pas si bon.

Nous devons également examiner la distribution entre les clusters - une bonne parcelle a des tailles similaires de zones groupées ou des points bien répartis. Dans ce graphique, il y a 3 clusters plus petits (numéro 3, 2, 1) et un cluster plus grand (numéro 0), ce qui n'est pas le résultat que nous attendions.

Consultez notre guide pratique et pratique pour apprendre Git, avec les meilleures pratiques, les normes acceptées par l'industrie et la feuille de triche incluse. Arrêtez de googler les commandes Git et en fait apprendre il!

Répétons le même tracé pour 3 clusters pour voir ce qui se passe :

model_3clust = KMeans(n_clusters = 3, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

silhouette pour les clusters kmeans

En changeant le nombre de clusters, le score de silhouette a obtenu 0.05 plus élevé et les grappes sont plus équilibrées. Si nous ne connaissions pas le nombre réel de grappes, en expérimentant et en combinant les deux techniques, nous aurions choisi 3 au lieu de 2 comme le nombre de Ks.

Ceci est un exemple de l'importance de combiner et de comparer différentes métriques, de visualiser des données et d'expérimenter avec différentes valeurs de clusters pour orienter le résultat dans la bonne direction. Et aussi, comment avoir une bibliothèque qui facilite cette analyse peut aider dans ce processus !

Horodatage:

Plus de Stackabuse