logo

Clustering hiérarchique dans l'apprentissage automatique

Le clustering hiérarchique est un autre algorithme d'apprentissage automatique non supervisé, utilisé pour regrouper les ensembles de données non étiquetés dans un cluster et également appelé analyse de cluster hiérarchique ou HCA.

Dans cet algorithme, nous développons la hiérarchie des clusters sous la forme d'un arbre, et cette structure en forme d'arbre est connue sous le nom de dendrogramme .

Parfois, les résultats du clustering K-means et du clustering hiérarchique peuvent sembler similaires, mais ils diffèrent tous deux en fonction de leur fonctionnement. Comme il n’est pas nécessaire de prédéterminer le nombre de clusters comme nous l’avons fait dans l’algorithme K-Means.

La technique de clustering hiérarchique comporte deux approches :

exemples de DFA
    Agglomératif :L'aggloméré est un de bas en haut approche, dans laquelle l'algorithme commence par prendre tous les points de données sous forme de clusters uniques et les fusionner jusqu'à ce qu'il ne reste qu'un seul cluster.Diviseur :L'algorithme de division est l'inverse de l'algorithme d'agglomération car il s'agit d'un approche descendante.

Pourquoi un clustering hiérarchique ?

Comme nous en avons déjà d'autres regroupement des algorithmes tels que Clustering K-Means , alors pourquoi avons-nous besoin d'un clustering hiérarchique ? Ainsi, comme nous l'avons vu dans le clustering K-means, cet algorithme présente certains défis, à savoir un nombre prédéterminé de clusters, et il essaie toujours de créer des clusters de même taille. Pour résoudre ces deux défis, nous pouvons opter pour l'algorithme de clustering hiérarchique car, dans cet algorithme, nous n'avons pas besoin de connaître le nombre prédéfini de clusters.

Dans cette rubrique, nous discuterons de l'algorithme de clustering hiérarchique aggloméré.

Clustering hiérarchique aggloméré

L'algorithme de clustering hiérarchique agglomératif est un exemple populaire de HCA. Pour regrouper les ensembles de données en clusters, il suit le une approche en profondeur . Cela signifie que cet algorithme considère chaque ensemble de données comme un seul cluster au début, puis commence à combiner la paire de clusters la plus proche. Il le fait jusqu'à ce que tous les clusters soient fusionnés en un seul cluster contenant tous les ensembles de données.

Cette hiérarchie de clusters est représentée sous la forme du dendrogramme.

Comment fonctionne le clustering hiérarchique aggloméré ?

Le fonctionnement de l'algorithme AHC peut être expliqué en suivant les étapes ci-dessous :

    Étape 1:Créez chaque point de données en tant que cluster unique. Disons qu'il y a N points de données, donc le nombre de clusters sera également N.
    Clustering hiérarchique dans l'apprentissage automatique Étape 2:Prenez deux points de données ou clusters les plus proches et fusionnez-les pour former un seul cluster. Il y aura donc désormais des clusters N-1.
    Clustering hiérarchique dans l'apprentissage automatique Étape 3: Encore une fois, prenez les deux clusters les plus proches et fusionnez-les pour former un seul cluster. Il y aura des clusters N-2.
    Clustering hiérarchique dans l'apprentissage automatique Étape 4:Répétez l’étape 3 jusqu’à ce qu’il ne reste qu’un seul cluster. Nous obtiendrons donc les clusters suivants. Considérez les images ci-dessous :
    Clustering hiérarchique dans l'apprentissage automatique
    Clustering hiérarchique dans l'apprentissage automatique
    Clustering hiérarchique dans l'apprentissage automatique Étape 5 :Une fois que tous les clusters sont combinés en un seul grand cluster, développez le dendrogramme pour diviser les clusters selon le problème.

Remarque : Pour mieux comprendre le clustering hiérarchique, il est conseillé de jeter un œil au clustering k-means.

Mesurer la distance entre deux clusters

Comme nous l'avons vu, le distance la plus proche entre les deux clusters est crucial pour le clustering hiérarchique. Il existe différentes manières de calculer la distance entre deux clusters, et ces méthodes déterminent la règle de clustering. Ces mesures sont appelées Méthodes de liaison . Certaines des méthodes de liaison les plus populaires sont indiquées ci-dessous :

    Liaison unique :C'est la distance la plus courte entre les points les plus proches des clusters. Considérez l'image ci-dessous :
    Clustering hiérarchique dans l'apprentissage automatique Lien complet :C'est la distance la plus grande entre les deux points de deux clusters différents. Il s’agit de l’une des méthodes de liaison les plus populaires car elle forme des clusters plus serrés que la liaison unique.
    Clustering hiérarchique dans l'apprentissage automatique Lien moyen :Il s'agit de la méthode de liaison dans laquelle la distance entre chaque paire d'ensembles de données est additionnée puis divisée par le nombre total d'ensembles de données pour calculer la distance moyenne entre deux clusters. C’est également l’une des méthodes de liaison les plus populaires.Liaison centroïde :C'est la méthode de liaison dans laquelle la distance entre le centre de gravité des clusters est calculée. Considérez l'image ci-dessous :
    Clustering hiérarchique dans l'apprentissage automatique

À partir des approches ci-dessus, nous pouvons appliquer n’importe laquelle d’entre elles en fonction du type de problème ou des exigences commerciales.

Réalisation du dendrogramme dans le clustering hiérarchique

Le dendrogramme est une structure arborescente qui est principalement utilisée pour stocker chaque étape sous forme de mémoire exécutée par l'algorithme HC. Dans le tracé du dendrogramme, l'axe Y montre les distances euclidiennes entre les points de données et l'axe X montre tous les points de données de l'ensemble de données donné.

Le fonctionnement du dendrogramme peut être expliqué à l'aide du schéma ci-dessous :

Clustering hiérarchique dans l'apprentissage automatique

Dans le diagramme ci-dessus, la partie gauche montre comment les clusters sont créés dans le clustering agglomératif, et la partie droite montre le dendrogramme correspondant.

  • Comme nous l'avons vu ci-dessus, premièrement, les points de données P2 et P3 se combinent et forment un cluster, en conséquence un dendrogramme est créé, qui relie P2 et P3 avec une forme rectangulaire. La hauteur est décidée en fonction de la distance euclidienne entre les points de données.
  • À l'étape suivante, P5 et P6 forment un cluster et le dendrogramme correspondant est créé. Elle est plus élevée que la précédente, car la distance euclidienne entre P5 et P6 est un peu plus grande que celle entre P2 et P3.
  • Encore une fois, deux nouveaux dendrogrammes sont créés qui combinent P1, P2 et P3 dans un dendrogramme, et P4, P5 et P6, dans un autre dendrogramme.
  • Enfin, le dendrogramme final est créé et combine tous les points de données.

Nous pouvons couper l’arborescence du dendrogramme à n’importe quel niveau selon nos besoins.

Implémentation Python du clustering hiérarchique aggloméré

Nous allons maintenant voir l’implémentation pratique de l’algorithme de clustering hiérarchique agglomératif utilisant Python. Pour implémenter cela, nous utiliserons le même problème d'ensemble de données que celui que nous avons utilisé dans le sujet précédent sur le clustering K-means afin de pouvoir comparer facilement les deux concepts.

L'ensemble de données contient les informations des clients qui ont visité un centre commercial pour faire du shopping. Ainsi, le propriétaire du centre commercial souhaite trouver des modèles ou un comportement particulier de ses clients en utilisant les informations de l'ensemble de données.

Étapes de mise en œuvre d'AHC à l'aide de Python :

Les étapes de mise en œuvre seront les mêmes que pour le clustering k-means, à l'exception de quelques changements tels que la méthode pour trouver le nombre de clusters. Voici les étapes :

    Prétraitement des données Trouver le nombre optimal de clusters à l'aide du dendrogramme Entraînement du modèle de clustering hiérarchique Visualiser les clusters

Étapes de prétraitement des données :

Dans cette étape, nous importerons les bibliothèques et les ensembles de données pour notre modèle.

    Importer les bibliothèques
 # Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Les lignes de code ci-dessus sont utilisées pour importer les bibliothèques afin d'effectuer des tâches spécifiques, telles que numpy pour les opérations mathématiques, matplotlib pour dessiner les graphiques ou les nuages ​​de points, et pandas pour importer l'ensemble de données.

opacité de la transition CSS
    Importer l'ensemble de données
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Comme indiqué ci-dessus, nous avons importé le même ensemble de données de Mall_Customers_data.csv, comme nous l'avons fait dans le clustering k-means. Considérez le résultat ci-dessous :

javascript si instruction
Clustering hiérarchique dans l'apprentissage automatique
    Extraire la matrice des fonctionnalités

Ici, nous extrairons uniquement la matrice des caractéristiques car nous n'avons aucune information supplémentaire sur la variable dépendante. Le code est donné ci-dessous :

 x = dataset.iloc[:, [3, 4]].values 

Ici, nous n'avons extrait que 3 et 4 colonnes car nous utiliserons un tracé 2D pour voir les clusters. Nous considérons donc le score annuel des revenus et des dépenses comme matrice de fonctionnalités.

Étape 2 : Trouver le nombre optimal de clusters à l'aide du dendrogramme

Nous allons maintenant trouver le nombre optimal de clusters en utilisant le dendrogramme pour notre modèle. Pour cela, nous allons utiliser scipy bibliothèque car elle fournit une fonction qui renverra directement le dendrogramme de notre code. Considérez les lignes de code ci-dessous :

 #Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show() 

Dans les lignes de code ci-dessus, nous avons importé le hiérarchie module de la bibliothèque scipy. Ce module nous fournit une méthode shc.denrogram(), qui prend le lien() comme paramètre. La fonction de liaison est utilisée pour définir la distance entre deux clusters, nous avons donc passé ici le x (matrice de fonctionnalités) et la méthode ' salle ', la méthode populaire de liaison dans le clustering hiérarchique.

Les lignes de code restantes servent à décrire les étiquettes du tracé du dendrogramme.

Sortir:

En exécutant les lignes de code ci-dessus, nous obtiendrons le résultat ci-dessous :

Clustering hiérarchique dans l'apprentissage automatique

À l'aide de ce dendrogramme, nous allons maintenant déterminer le nombre optimal de clusters pour notre modèle. Pour cela, nous trouverons le distance verticale maximale cela ne coupe aucune barre horizontale. Considérez le diagramme ci-dessous :

Clustering hiérarchique dans l'apprentissage automatique

Dans le diagramme ci-dessus, nous avons montré les distances verticales qui ne coupent pas leurs barres horizontales. Comme on peut le visualiser, les 4èmela distance semble être au maximum, donc d'après cela, le nombre de clusters sera de 5 (les lignes verticales dans cette plage). On peut aussi prendre le 2sdnombre car il est approximativement égal au 4èmedistance, mais nous considérerons les 5 clusters car c'est la même chose que nous avons calculée dans l'algorithme K-means.

Ainsi, le nombre optimal de clusters sera de 5 , et nous entraînerons le modèle à l'étape suivante, en utilisant le même.

Étape 3 : Formation du modèle de clustering hiérarchique

Comme nous connaissons le nombre optimal de clusters requis, nous pouvons maintenant entraîner notre modèle. Le code est donné ci-dessous :

 #training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x) 

Dans le code ci-dessus, nous avons importé le AgglomératifClustering classe du module cluster de la bibliothèque scikit learn.

Ensuite, nous avons créé l'objet de cette classe nommé comme hc. La classe AgglomerativeClustering prend les paramètres suivants :

    n_clusters=5: Il définit le nombre de clusters, et nous en avons pris ici 5 car c'est le nombre optimal de clusters.affinité='euclidien': C'est une métrique utilisée pour calculer le lien.lien='quartier': Il définit les critères de liaison, nous avons utilisé ici le lien « quartier ». Cette méthode est la méthode de liaison populaire que nous avons déjà utilisée pour créer le dendrogramme. Cela réduit la variance dans chaque cluster.

Dans la dernière ligne, nous avons créé la variable dépendante y_pred pour ajuster ou entraîner le modèle. Il entraîne non seulement le modèle, mais renvoie également les clusters auxquels appartient chaque point de données.

Après avoir exécuté les lignes de code ci-dessus, si nous passons par l'option explorateur de variables dans notre IDE Sypder, nous pouvons vérifier la variable y_pred. Nous pouvons comparer l'ensemble de données d'origine avec la variable y_pred. Considérez l'image ci-dessous :

Clustering hiérarchique dans l'apprentissage automatique

Comme nous pouvons le voir sur l'image ci-dessus, le y_pred affiche la valeur du cluster, ce qui signifie que l'identifiant client 1 appartient au 5èmecluster (comme l'indexation commence à 0, donc 4 signifie 5èmecluster), l'identifiant client 2 appartient à 4èmecluster, et ainsi de suite.

Étape 4 : Visualiser les clusters

Comme nous avons entraîné notre modèle avec succès, nous pouvons désormais visualiser les clusters correspondant à l'ensemble de données.

Ici, nous utiliserons les mêmes lignes de code que dans le clustering k-means, à une exception près. Ici, nous ne tracerons pas le centroïde comme nous l'avons fait en k-means, car ici nous avons utilisé un dendrogramme pour déterminer le nombre optimal de clusters. Le code est donné ci-dessous :

 #visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show() 

Sortie : En exécutant les lignes de code ci-dessus, nous obtiendrons le résultat ci-dessous :

quand l'école a-t-elle été inventée
Clustering hiérarchique dans l'apprentissage automatique