logo

Hiërarchische clustering in machinaal leren

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:

    Agglomeratief:Agglomeratief is een onderkant boven aanpak, waarbij het algoritme begint met het nemen van alle datapunten als afzonderlijke clusters en deze samenvoegt totdat er één cluster overblijft.Verdeeldheid:Het verdeeldheidsalgoritme is het omgekeerde van het agglomeratieve algoritme, aangezien het een top-down benadering.

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:

    Stap 1:Creëer elk datapunt als één cluster. Laten we zeggen dat er N datapunten zijn, dus het aantal clusters zal ook N zijn.
    Hiërarchische clustering in machinaal leren Stap 2:Neem twee dichtstbijzijnde datapunten of clusters en voeg ze samen om één cluster te vormen. Er zullen nu dus N-1-clusters zijn.
    Hiërarchische clustering in machinaal leren Stap 3: Neem opnieuw de twee dichtstbijzijnde clusters en voeg ze samen om één cluster te vormen. Er zullen N-2 clusters zijn.
    Hiërarchische clustering in machinaal leren Stap 4:Herhaal stap 3 totdat er nog maar één cluster over is. We krijgen dus de volgende clusters. Beschouw de onderstaande afbeeldingen:
    Hiërarchische clustering in machinaal leren
    Hiërarchische clustering in machinaal leren
    Hiërarchische clustering in machinaal leren Stap 5:Zodra alle clusters zijn gecombineerd tot één grote cluster, ontwikkelt u het dendrogram om de clusters volgens het probleem te verdelen.

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:

    Enkele koppeling:Het is de kortste afstand tussen de dichtstbijzijnde punten van de clusters. Beschouw de onderstaande afbeelding:
    Hiërarchische clustering in machinaal leren Volledige koppeling:Het is de grootste afstand tussen de twee punten van twee verschillende clusters. Het is een van de populaire koppelingsmethoden omdat het nauwere clusters vormt dan een enkele koppeling.
    Hiërarchische clustering in machinaal leren Gemiddelde koppeling:Het is de koppelingsmethode waarbij de afstand tussen elk paar datasets wordt opgeteld en vervolgens wordt gedeeld door het totale aantal datasets om de gemiddelde afstand tussen twee clusters te berekenen. Het is ook een van de meest populaire koppelingsmethoden.Centroid-koppeling:Het is de koppelingsmethode waarbij de afstand tussen het zwaartepunt van de clusters wordt berekend. Beschouw de onderstaande afbeelding:
    Hiërarchische clustering in machinaal leren

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:

Hiërarchische clustering in machinaal leren

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:

    Voorverwerking van gegevens Het vinden van het optimale aantal clusters met behulp van het Dendrogram Het hiërarchische clustermodel trainen Het visualiseren van de clusters

Stappen voor voorverwerking van gegevens:

In deze stap importeren we de bibliotheken en datasets voor ons model.

    Importeren van de bibliotheken
 # 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.

    De gegevensset importeren
 # 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:

Hiërarchische clustering in machinaal leren
    De matrix van kenmerken extraheren

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 :

Hiërarchische clustering in machinaal leren

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:

Hiërarchische clustering in machinaal leren

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:

    n_clusters=5: Het definieert het aantal clusters, en we hebben hier 5 genomen omdat dit het optimale aantal clusters is.affiniteit='euclidisch': Het is een metriek die wordt gebruikt om de koppeling te berekenen.koppeling='ward': Het definieert de koppelingscriteria, hier hebben we de 'ward'-koppeling gebruikt. Deze methode is de populaire koppelingsmethode die we al hebben gebruikt voor het maken van het dendrogram. Het vermindert de variantie in elk cluster.

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
Hiërarchische clustering in machinaal leren

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:

Hiërarchische clustering in machinaal leren