Hiërarchische clustering is een ander machine learning-algoritme zonder toezicht, dat wordt gebruikt om de ongelabelde datasets in een cluster te groeperen en ook bekend staat als hiërarchische clusteranalyse of HCA.
In dit algoritme ontwikkelen we de hiërarchie van clusters in de vorm van een boom, en deze boomvormige structuur staat bekend als de dendrogram .
Java breken
Soms lijken de resultaten van K-means-clustering en hiërarchische clustering op elkaar, maar ze verschillen beide, afhankelijk van hoe ze werken. Omdat er geen vereiste is om het aantal clusters vooraf te bepalen, zoals we deden in het K-Means-algoritme.
De hiërarchische clustertechniek kent twee benaderingen:
Waarom hiërarchische clustering?
Zoals we al andere hebben clustering algoritmen zoals K-betekent clustering , waarom hebben we dan hiërarchische clustering nodig? Zoals we bij de K-means-clustering hebben gezien, zijn er enkele uitdagingen met dit algoritme, namelijk een vooraf bepaald aantal clusters, en probeert het altijd clusters van dezelfde grootte te creëren. Om deze twee uitdagingen op te lossen, kunnen we kiezen voor het hiërarchische clusteralgoritme, omdat we in dit algoritme geen kennis hoeven te hebben over het vooraf gedefinieerde aantal clusters.
In dit onderwerp bespreken we het algoritme voor agglomeratieve hiërarchische clustering.
Agglomeratieve hiërarchische clustering
Het agglomeratieve hiërarchische clusteralgoritme is een populair voorbeeld van HCA. Om de datasets in clusters te groeperen, volgt het de bottom-up benadering . Het betekent dat dit algoritme elke dataset in het begin als één cluster beschouwt en vervolgens begint met het combineren van het dichtstbijzijnde paar clusters. Dit gebeurt totdat alle clusters zijn samengevoegd tot één cluster dat alle datasets bevat.
Deze hiërarchie van clusters wordt weergegeven in de vorm van het dendrogram.
Hoe werkt de agglomeratieve hiërarchische clustering?
De werking van het AHC-algoritme kan worden uitgelegd aan de hand van de onderstaande stappen:
Opmerking: Om hiërarchische clustering beter te begrijpen, is het raadzaam om eens naar k-means clustering te kijken
Meet de afstand tussen twee clusters
Zoals we hebben gezien, is de dichtstbijzijnde afstand tussen de twee clusters is cruciaal voor de hiërarchische clustering. Er zijn verschillende manieren om de afstand tussen twee clusters te berekenen, en deze manieren bepalen de regel voor clustering. Deze maatregelen worden genoemd Koppelingsmethoden . Enkele van de populaire koppelingsmethoden worden hieronder gegeven:
Vanuit de hierboven gegeven benaderingen kunnen we ze allemaal toepassen, afhankelijk van het type probleem of de zakelijke vereiste.
Woking van Dendrogram in hiërarchische clustering
Het dendrogram is een boomachtige structuur die voornamelijk wordt gebruikt om elke stap op te slaan als een geheugen dat het HC-algoritme uitvoert. In de dendrogramgrafiek toont de Y-as de Euclidische afstanden tussen de datapunten, en toont de x-as alle datapunten van de gegeven dataset.
De werking van het dendrogram kan worden uitgelegd aan de hand van onderstaand diagram:
In het bovenstaande diagram laat het linkerdeel zien hoe clusters worden gecreëerd bij agglomeratieve clustering, en toont het rechterdeel het overeenkomstige dendrogram.
- Zoals we hierboven hebben besproken, worden eerst de datapunten P2 en P3 gecombineerd en vormen ze een cluster. Dienovereenkomstig wordt een dendrogram gemaakt dat P2 en P3 met een rechthoekige vorm verbindt. De hoogte wordt bepaald op basis van de Euclidische afstand tussen de datapunten.
- In de volgende stap vormen P5 en P6 een cluster en wordt het bijbehorende dendrogram gemaakt. Het is hoger dan voorheen, omdat de Euclidische afstand tussen P5 en P6 iets groter is dan die tussen P2 en P3.
- Opnieuw worden er twee nieuwe dendrogrammen gemaakt die P1, P2 en P3 combineren in één dendrogram, en P4, P5 en P6 in een ander dendrogram.
- Eindelijk wordt het definitieve dendrogram gemaakt dat alle gegevenspunten samen combineert.
We kunnen de dendrogramboomstructuur op elk niveau doorsnijden volgens onze vereisten.
Python-implementatie van agglomeratieve hiërarchische clustering
Nu zullen we de praktische implementatie zien van het agglomeratieve hiërarchische clusteralgoritme met behulp van Python. Om dit te implementeren zullen we hetzelfde datasetprobleem gebruiken dat we in het vorige onderwerp van K-means clustering hebben gebruikt, zodat we beide concepten gemakkelijk kunnen vergelijken.
De dataset bevat de informatie van klanten die een winkelcentrum hebben bezocht om te winkelen. De eigenaar van het winkelcentrum wil dus bepaalde patronen of bepaald gedrag van zijn klanten ontdekken met behulp van de datasetinformatie.
Stappen voor implementatie van AHC met Python:
De implementatiestappen zullen hetzelfde zijn als bij k-means clustering, met uitzondering van enkele wijzigingen, zoals de methode om het aantal clusters te vinden. Hieronder staan de stappen:
Stappen voor voorverwerking van gegevens:
In deze stap importeren we de bibliotheken en datasets voor ons model.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
De bovenstaande coderegels worden gebruikt om de bibliotheken te importeren om specifieke taken uit te voeren, zoals numpig voor de wiskundige bewerkingen, matplotlib voor het tekenen van de grafieken of het spreidingsdiagram, en panda's voor het importeren van de dataset.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Zoals hierboven besproken, hebben we dezelfde dataset geïmporteerd van Mall_Customers_data.csv, zoals we deden bij k-betekent clustering. Beschouw de onderstaande uitvoer:
Hier extraheren we alleen de matrix met kenmerken, omdat we geen verdere informatie hebben over de afhankelijke variabele. Code wordt hieronder gegeven:
x = dataset.iloc[:, [3, 4]].values
Hier hebben we slechts 3 en 4 kolommen geëxtraheerd, omdat we een 2D-plot zullen gebruiken om de clusters te zien. We beschouwen de jaarlijkse inkomsten- en uitgavenscore dus als de matrix van kenmerken.
Stap 2: Het vinden van het optimale aantal clusters met behulp van het dendrogram
Nu zullen we het optimale aantal clusters vinden met behulp van het Dendrogram voor ons model. Hiervoor gaan we gebruiken pittig bibliotheek omdat het een functie biedt die direct het dendrogram voor onze code retourneert. Beschouw de onderstaande regels code:
#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()
In de bovenstaande coderegels hebben we de hiërarchie module van scipy-bibliotheek. Deze module biedt ons een methode shc.denrogram(), die de koppeling() als parameter. De koppelingsfunctie wordt gebruikt om de afstand tussen twee clusters te definiëren, dus hier hebben we de x(matrix van functies) en methode ' afdeling ,' de populaire koppelingsmethode bij hiërarchische clustering.
De resterende coderegels zijn bedoeld om de labels voor de dendrogramplot te beschrijven.
Uitgang:
Door de bovenstaande coderegels uit te voeren, krijgen we de onderstaande uitvoer :
Met behulp van dit dendrogram gaan we nu het optimale aantal clusters voor ons model bepalen. Hiervoor vinden we de maximale verticale afstand dat geen enkele horizontale balk doorsnijdt. Beschouw het onderstaande diagram:
In het bovenstaande diagram hebben we de verticale afstanden weergegeven die de horizontale staven niet doorsnijden. Zoals we ons kunnen voorstellen, zijn de 4eafstand lijkt maximaal, dus volgens dit, het aantal clusters zal 5 zijn (de verticale lijnen in dit bereik). Wij kunnen ook de 2 nemennlgetal omdat het ongeveer gelijk is aan de 4eafstand, maar we zullen de 5 clusters in overweging nemen, omdat we dezelfde hebben berekend in het K-means-algoritme.
Het optimale aantal clusters is dus 5 , en we zullen het model in de volgende stap trainen, met behulp van hetzelfde.
Stap 3: Trainen van het hiërarchische clustermodel
Omdat we het vereiste optimale aantal clusters kennen, kunnen we ons model nu trainen. De code staat hieronder:
#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)
In de bovenstaande code hebben we de Agglomeratieve clustering klasse van clustermodule van scikit-leerbibliotheek.
Vervolgens hebben we het object van deze klasse gemaakt met de naam as hc. De klasse AgglomerativeClustering heeft de volgende parameters:
In de laatste regel hebben we de afhankelijke variabele y_pred gemaakt om het model aan te passen of te trainen. Het traint niet alleen het model, maar retourneert ook de clusters waartoe elk datapunt behoort.
Na het uitvoeren van de bovenstaande coderegels kunnen we, als we de variabele explorer-optie in onze Sypder IDE doorlopen, de variabele y_pred controleren. We kunnen de originele dataset vergelijken met de variabele y_pred. Beschouw de onderstaande afbeelding:
tekenreeks en subtekenreeks
Zoals we in de bovenstaande afbeelding kunnen zien, is de y_pred toont de clusterwaarde, wat betekent dat klant-ID 1 tot de 5 behoortecluster (aangezien de indexering begint vanaf 0, dus 4 betekent 5ecluster), hoort klant-id 2 bij 4eclusteren, enzovoort.
Stap 4: Visualiseren van de clusters
Omdat we ons model met succes hebben getraind, kunnen we nu de clusters visualiseren die overeenkomen met de dataset.
Hier zullen we dezelfde coderegels gebruiken als bij k-means clustering, op één wijziging na. Hier zullen we niet het zwaartepunt uitzetten dat we in k-gemiddelden hebben gedaan, omdat we hier het dendrogram hebben gebruikt om het optimale aantal clusters te bepalen. De code staat hieronder:
#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()
Uitvoer: door de bovenstaande coderegels uit te voeren, krijgen we de onderstaande uitvoer: