Algorithme de clustering hiérarchique Python !

Nœud source: 1055669

Cet article a été publié dans le cadre du Blogathon sur la science des données

Introduction

Dans cet article, nous examinerons une approche différente du clustering K Means appelée clustering hiérarchique. Par rapport à K Means ou K Mode, le clustering hiérarchique a un algorithme sous-jacent différent pour le fonctionnement du mécanisme de clustering. Le clustering hiérarchique utilise des techniques d'agglomération ou de division, tandis que K Means utilise une combinaison de distance centroïde et euclidienne pour former des clusters. Les dendrogrammes peuvent être utilisés pour visualiser les clusters dans un clustering hiérarchique, ce qui peut aider à une meilleure interprétation des résultats grâce à des taxonomies significatives. Nous n'avons pas à spécifier le nombre de clusters lors de la création d'un dendrogramme.

Ici, nous utilisons Python pour expliquer le modèle de clustering hiérarchique. Nous avons 200 données de clients de centres commerciaux dans notre ensemble de données. L'ID client, le genre, l'âge, le revenu annuel et le score de dépenses de chaque client sont tous inclus dans la base de données. Le montant calculé pour chacun des scores de dépenses de leurs clients est basé sur plusieurs critères, tels que leurs revenus, le nombre de fois par semaine qu'ils visitent le centre commercial et le montant d'argent qu'ils ont dépensé au cours d'une année. Ce score va de 1 à 100. Parce que nous ne connaissons pas les réponses, un problème métier devient un problème de clustering. Les catégories finales des données nous sont inconnues. En conséquence, notre objectif est de découvrir des clusters de clients jusqu'alors inconnus.

Mais d'abord, nous examinons certains termes importants dans le clustering hiérarchique.

Termes importants dans le clustering hiérarchique

Méthodes de liaison

S'il y a (a) des observations originales a[0],…,a[|a|1] dans le cluster (a) et (b) des objets originaux b[0],…,b[|b|1] dans le cluster ( b), alors il faut calculer la distance entre deux clusters (a) et (b) afin de les combiner (b). Disons qu'il y a un point (d) qui n'a été attribué à aucun des clusters. Nous devrons déterminer à quelle distance le cluster (a) est du cluster (d) et le cluster (b) est du cluster (d).

Les clusters contiennent désormais généralement plusieurs points, ce qui nécessite une méthode différente pour calculer la matrice de distance. La méthode par laquelle la distance entre les clusters, ou la distance point à cluster, est calculée est déterminée par liaison. Voici quelques-uns des mécanismes de liaison les plus couramment utilisés :

Liaison unique — Les distances entre les membres les plus similaires sont calculées pour chaque paire de clusters, et les clusters sont ensuite fusionnés en fonction de la distance la plus courte.

Lien moyen — La distance entre tous les membres d'un cluster et tous les membres d'un autre cluster est calculée. Après cela, la moyenne de ces distances est utilisée pour déterminer quels clusters fusionneront.

Liaison complète — Pour chaque paire de clusters, les distances entre les membres les plus dissemblables sont calculées, et les clusters sont ensuite fusionnés en fonction de la distance la plus courte.

Lien médian — Nous utilisons la distance médiane au lieu de la distance moyenne de la même manière que le couplage moyen.

Lien de paroisse — Détermine la distance entre les clusters à l'aide de la méthode d'analyse de la variance.

Liaison centroïde — Le centroïde de chaque cluster est calculé en faisant la moyenne de tous les points attribués au cluster, et la distance entre les clusters est ensuite calculée à l'aide de ce centroïde.

Calcul de distance

Il existe plusieurs approches pour calculer la distance entre deux ou plusieurs clusters, la distance euclidienne étant la plus populaire. D'autres mesures de distance, telles que Minkowski, City Block, Hamming, Jaccard et Chebyshev, peuvent également être utilisées avec le clustering hiérarchique. Différentes métriques de distance ont un impact sur le clustering hiérarchique, comme le montre la figure 2.

calcul de distance

Dendrogramme

La relation entre les objets dans un espace de caractéristiques est représentée par un dendrogramme. Dans un espace d'entités, il est utilisé pour afficher la distance entre chaque paire d'objets fusionnés séquentiellement. Les dendrogrammes sont fréquemment utilisés pour examiner les clusters hiérarchiques avant de décider du nombre approprié de clusters pour l'ensemble de données. La distance de dendrogramme est la distance entre deux clusters lorsqu'ils se combinent. La distance du dendrogramme détermine si deux ou plusieurs grappes sont disjointes ou peuvent être réunies pour former une seule grappe.

Exemple

Examinons maintenant des exemples utilisant Python pour démontrer le modèle de clustering hiérarchique. Nous avons 200 données de clients du centre commercial dans notre jeu de données. L'ID client, le genre, l'âge, le revenu annuel et le score de dépenses de chaque client sont tous inclus dans la base de données. Le montant calculé pour chacun des scores de dépenses de leurs clients est basé sur plusieurs critères, tels que leurs revenus, le nombre de fois par semaine qu'ils visitent le centre commercial et l'argent qu'ils ont dépensé pendant un an. Ce score va de 1 à 100. Parce que nous ne connaissons pas les réponses, un problème métier devient un problème de clustering.

#1 Importer les bibliothèques
importer numpy en tant que np importer matplotlib.pyplot en tant que plt importer des pandas en tant que pd
#2 Importation du jeu de données Mall_Customers par les pandas
dataset = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].values

Cette nouvelle étape du clustering hiérarchique consiste également à déterminer le nombre optimal de clusters. Nous n'allons pas utiliser la méthode du coude cette fois. Nous allons utiliser le dendrogramme.

#3 Utiliser le dendrogramme pour trouver le nombre optimal de clusters. # La première chose que nous allons faire est d'importer la bibliothèque scipy. scipy est une bibliothèque Python open source qui contient des outils pour effectuer un clustering hiérarchique et créer des dendrogrammes. # Importez uniquement l'outil nécessaire. importer scipy.cluster.hierarchy en tant que sch 
#Créons une variable de dendrogramme # Le lien est en fait l'algorithme lui-même de clustering hiérarchique, puis dans le #lien, nous devons spécifier sur quelles données nous appliquons et engageons. Il s'agit de X dataset dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euclidean distances') plt. spectacle()

La méthode de Ward est une méthode qui tente de réduire la variance au sein de chaque cluster. C'est presque la même chose que lorsque nous avons utilisé K-means pour minimiser le wcss pour tracer notre graphique de méthode de coude ; la seule différence est qu'au lieu de wcss, nous minimisons les variantes intra-cluster. Au sein de chaque cluster, il s'agit de la variance. Le dendrogramme est présenté ci-dessous.

dendogramme

Les clients sont représentés sur l'axe des x et la distance euclidienne entre les clusters est représentée sur l'axe des y. Comment déterminer le meilleur nombre de clusters sur la base de ce diagramme ? Nous voulons trouver la distance verticale la plus longue possible sans traverser aucune ligne horizontale, qui est la ligne encadrée en rouge dans le diagramme ci-dessus. Comptons les lignes sur le diagramme et déterminons combien de clusters sont les meilleurs. Pour cet ensemble de données, le numéro de cluster sera 5.

#4 Ajustement du clustering hiérarchique à l'ensemble de données Mall_Customes # Il existe deux algorithmes pour le clustering hiérarchique : le clustering hiérarchique aggloméré et le # Clustering hiérarchique divisionnaire. Nous choisissons la méthode de distance et de pupille euclidienne pour notre # classe d'algorithme de sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euclidien', link ='ward') # Essayons d'adapter l'algorithme de clustering hiérarchique à l'ensemble de données X tout en créant le vecteur # clusters qui indique pour chaque client à quel cluster appartient le client. y_hc=hc.fit_predict(X)
#5 Visualiser les clusters. Ce code est similaire au code de visualisation k-means. #Nous remplaçons uniquement le nom du vecteur y_kmeans par y_hc pour le clustering hiérarchique plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='red', label = 'Cluster 1') plt.scatter(X[y_hc==1, 0], X[y_hc==1, 1], s=100, c='blue', label ='Cluster 2') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='green', label ='Cluster 3') plt.scatter(X[y_hc==3, 0] , X[y_hc==3, 1], s=100, c='cyan', label ='Cluster 4') plt.scatter(X[y_hc==4, 0], X[y_hc==4, 1 ], s=100, c='magenta', label ='Cluster 5') plt.title('Clusters of Customers (Hierarchical Clustering Model)') plt.xlabel('Annual Income(k$)') plt.ylabel ('Score de dépenses (1-100') plt.show()
grappes | Classification hiérarchique
Cluster1(Rouge), Cluster2 (Bleu), Cluster3(Vert), Cluster4(Cyan), Cluster5 (Magenta)

Ces clusters peuvent être considérés comme le segment de clientèle du centre commercial.

C'est tout ce qu'il y a dans un modèle de clustering hiérarchique standard. L'ensemble de données ainsi que tous les codes sont disponibles dans la section Github.

Conclusion

Dans tout exercice de clustering, la détermination du nombre de clusters est un processus qui prend du temps. Parce que le côté commercial de l'entreprise est plus soucieux d'extraire du sens de ces groupes, il est crucial de visualiser les clusters en deux dimensions et de voir s'ils sont distincts. L'ACP ou l'analyse factorielle peuvent être utilisées pour atteindre cet objectif. Il s'agit d'une méthode courante pour présenter les résultats finaux à diverses parties prenantes, ce qui permet à tout le monde de consommer plus facilement les résultats.

EndNote

Merci pour la lecture!
J'espère que vous avez apprécié l'article et augmenté vos connaissances.
N'hésitez pas à me contacter on Email
Quelque chose de non mentionné ou souhaitez partager vos réflexions? N'hésitez pas à commenter ci-dessous et je vous répondrai.

À propos de l’auteur

Hardikkumar M. Dhaduk
Analyste de données | Spécialiste en analyse de données numériques | Apprenant en science des données
Connectez-vous avec moi sur LinkedIn
Connectez-vous avec moi sur Github

Les médias présentés dans cet article ne sont pas la propriété d'Analytics Vidhya et sont utilisés à la discrétion de l'auteur.

Source : https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

Horodatage:

Plus de Analytique Vidhya