Hiërarchisch clustering algoritme Python!

Bronknooppunt: 1055669

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon

Introductie

In dit artikel zullen we kijken naar een andere benadering van K Means-clustering, hiërarchische clustering genaamd. In vergelijking met K Means of K Mode heeft hiërarchische Clustering een ander onderliggend algoritme voor hoe het clusteringmechanisme werkt. Hiërarchische clustering maakt gebruik van agglomeratieve of verdelende technieken, terwijl K Means een combinatie van zwaartepunt en euclidische afstand gebruikt om clusters te vormen. Dendrogrammen kunnen worden gebruikt om clusters in hiërarchische clustering te visualiseren, wat kan helpen bij een betere interpretatie van resultaten door middel van zinvolle taxonomieën. Bij het maken van een dendrogram hoeven we het aantal clusters niet op te geven.

Hier gebruiken we Python om het hiërarchische clustermodel uit te leggen. We hebben gegevens van 200 winkelcentra in onze dataset. De klant-ID, het genre, de leeftijd, het jaarinkomen en de bestedingsscore van elke klant zijn allemaal opgenomen in het dataframe. Het berekende bedrag voor de bestedingsscores van elk van hun klanten is gebaseerd op verschillende criteria, zoals hun inkomen, het aantal keren per week dat ze het winkelcentrum bezoeken en de hoeveelheid geld die ze in een jaar hebben uitgegeven. Deze score loopt van 1 tot 100. Omdat we de antwoorden niet weten, wordt een bedrijfsprobleem een ​​clusterprobleem. De uiteindelijke categorieën van de gegevens zijn ons niet bekend. Als gevolg hiervan is ons doel om enkele voorheen onbekende klantclusters te ontdekken.

Maar eerst kijken we naar enkele belangrijke termen in hiërarchische clustering.

Belangrijke termen in hiërarchische clustering

Koppelingsmethoden

Als er (a) originele waarnemingen a[0],…,a[|a|1] in cluster (a) en (b) originele objecten b[0],…,b[|b|1] in cluster ( b), dan moeten we de afstand tussen twee clusters (a) en (b) berekenen om ze te combineren (b). Stel dat er een punt (d) is dat niet aan een van de clusters is toegewezen. We moeten uitzoeken hoe ver cluster (a) van cluster (d) en cluster (b) van cluster (d) verwijderd is.

Clusters bevatten nu meestal meerdere punten, waardoor een andere methode voor het berekenen van de afstandsmatrix nodig is. De methode waarmee de afstand tussen clusters, of punt-tot-clusterafstand, wordt berekend, wordt bepaald door koppeling. De volgende zijn enkele van de meest gebruikte koppelingsmechanismen:

Enkele koppeling — De afstanden tussen de meest vergelijkbare leden worden berekend voor elk paar clusters, en de clusters worden vervolgens samengevoegd op basis van de kortste afstand.

Gemiddelde koppeling — De afstand tussen alle leden van een cluster en alle leden van een andere cluster wordt berekend. Daarna wordt aan de hand van het gemiddelde van deze afstanden bepaald welke clusters gaan fuseren.

Volledige koppeling — Voor elk paar clusters worden de afstanden tussen de meest ongelijke leden berekend, en de clusters worden vervolgens samengevoegd op basis van de kortste afstand.

Mediane koppeling — We gebruiken de mediane afstand in plaats van de gemiddelde afstand op een vergelijkbare manier als de gemiddelde koppeling.

Afdelingskoppeling — Bepaalt de afstand tussen clusters met behulp van de variantieanalysemethode.

Zwaartepunt koppeling — Het zwaartepunt van elk cluster wordt berekend door het gemiddelde te nemen van alle punten die aan het cluster zijn toegewezen, en de afstand tussen de clusters wordt vervolgens berekend met behulp van dit zwaartepunt.

Afstand berekening

Er bestaan ​​meerdere benaderingen voor het berekenen van de afstand tussen twee of meer clusters, waarbij Euclidische afstand het populairst is. Andere afstandsstatistieken, zoals Minkowski, City Block, Hamming, Jaccard en Chebyshev, kunnen ook worden gebruikt met hiërarchische clustering. Verschillende afstandsstatistieken hebben invloed op hiërarchische clustering, zoals weergegeven in figuur 2.

afstandsberekening

dendrogram

De relatie tussen objecten in een feature-ruimte wordt weergegeven door een dendrogram. In een functieruimte wordt het gebruikt om de afstand tussen elk paar opeenvolgend samengevoegde objecten weer te geven. Dendrogrammen worden vaak gebruikt om hiërarchische clusters te onderzoeken alvorens te beslissen over het juiste aantal clusters voor de dataset. De dendrogramafstand is de afstand tussen twee clusters wanneer ze combineren. De dendrogramafstand bepaalt of twee of meer clusters onsamenhangend zijn of kunnen worden samengevoegd om een ​​enkele cluster te vormen.

Voorbeeld

Nu kijken we naar voorbeelden met Python om het hiërarchische clustermodel te demonstreren. We hebben de gegevens van 200 winkelcentra in onze: dataset. De klant-ID, het genre, de leeftijd, het jaarinkomen en de bestedingsscore van elke klant zijn allemaal opgenomen in het dataframe. Het berekende bedrag voor de bestedingsscores van elk van hun klanten is gebaseerd op verschillende criteria, zoals hun inkomen, het aantal keren per week dat ze het winkelcentrum bezoeken en het geld dat ze een jaar lang hebben uitgegeven. Deze score loopt van 1 tot 100. Omdat we de antwoorden niet weten, wordt een bedrijfsprobleem een ​​clusterprobleem.

#1 De bibliotheken importeren
importeer numpy als np importeer matplotlib.pyplot als plt importeer panda's als pd
#2 Importeren van de Mall_Customers dataset door panda's
dataset = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].waarden

Deze nieuwe stap in hiërarchische clustering omvat ook het bepalen van het optimale aantal clusters. We gaan deze keer niet de elleboogmethode gebruiken. We gebruiken het dendrogram.

#3 Het dendrogram gebruiken om het optimale aantal clusters te vinden. # Het eerste dat we gaan doen, is de scipy-bibliotheek importeren. scipy is een open source # Python-bibliotheek die tools bevat voor hiërarchische clustering en het bouwen van dendrogrammen. # Importeer alleen het benodigde gereedschap. importeer scipy.cluster.hierarchy als sch 
#Laten we een dendrogramvariabele maken # linkage is eigenlijk het algoritme zelf van hiërarchische clustering en dan in #linkage moeten we specificeren op welke data we toepassen en ons bezighouden. Dit is X dataset dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euclidische afstanden') plt. laten zien()

De Ward-methode is een methode die probeert de variantie binnen elk cluster te verminderen. Het is bijna hetzelfde als toen we K-means gebruikten om de wcss te minimaliseren om onze elleboogmethodegrafiek te plotten; het enige verschil is dat we in plaats van wcss de varianten binnen de cluster minimaliseren. Binnen elk cluster is dit de variantie. Het dendrogram is hieronder weergegeven.

dendogram

Klanten worden weergegeven op de x-as en de Euclidische afstand tussen clusters wordt weergegeven op de y-as. Hoe bepalen we het beste aantal clusters op basis van dit diagram? We willen de langste verticale afstand vinden die we kunnen zonder horizontale lijnen te kruisen, wat de rode omlijnde lijn is in het bovenstaande diagram. Laten we de lijnen in het diagram tellen en uitzoeken hoeveel clusters het beste zijn. Voor deze dataset is het clusternummer 5.

#4 Hiërarchische clustering aanpassen aan de Mall_Customes dataset # Er zijn twee algoritmen voor hiërarchische clustering: Agglomerative Hiërarchische Clustering en # Divisive Hiërarchische Clustering. We kiezen de Euclidische afstands- en wijkmethode voor onze # algoritmeklasse uit sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering hc = AgglomerativeClustering (n_clusters = 5, affinity = 'euclidean', linkage ='ward') # Laten we proberen het hiërarchische clusteringalgoritme in te passen in dataset X tijdens het maken van de # clusters-vector die voor elke klant vertelt tot welk cluster de klant behoort. y_hc=hc.fit_predict(X)
#5 De clusters visualiseren. Deze code is vergelijkbaar met k-means visualisatiecode. #We vervangen alleen de vectornaam y_kmeans door y_hc voor de hiërarchische clustering 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='blauw', label ='Cluster 2') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='groen', label ='Cluster 3') plt.scatter(X[y_hc==3, 0] , X[y_hc==3, 1], s=100, c='cyaan', 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 van klanten (hiërarchisch clustermodel)') plt.xlabel('Jaarinkomen (k$)') plt.ylabel ('Uitgavenscore (1-100') plt.show()
clusters | Hiërarchische clustering
Cluster1(Rood), Cluster2 (Blauw), Cluster3(Groen), Cluster4(Cyaan), Cluster5 (Magenta)

Deze clusters kunnen worden gezien als het klantensegment van het winkelcentrum.

Dat is alles wat er is aan een standaard hiërarchisch clusteringmodel. De dataset en alle codes zijn beschikbaar in de Github-sectie.

Conclusie

Bij elke clusteroefening is het bepalen van het aantal clusters een tijdrovend proces. Omdat de commerciële kant van het bedrijf zich meer bezighoudt met het extraheren van betekenis aan deze groepen, is het cruciaal om de clusters in twee dimensies te visualiseren en te kijken of ze van elkaar te onderscheiden zijn. Om dit doel te bereiken kan PCA of Factor Analyse worden gebruikt. Dit is een veelgebruikte methode om eindresultaten aan verschillende belanghebbenden te presenteren, waardoor het voor iedereen gemakkelijker wordt om de output te consumeren.

EndNote

Bedankt voor het lezen!
Ik hoop dat je het artikel leuk vond en je kennis hebt vergroot.
Neem dan gerust contact met mij op on E-mail
Iets niet vermeld of wilt u uw mening delen? Voel je vrij om hieronder te reageren en ik neem contact met je op.

Over de auteur

Hardikkumar M.Dhaduk
Data Analist | Specialist digitale data-analyse | Leerling datawetenschap
Maak contact met mij op Linkedin
Maak contact met mij op GitHub

De media die in dit artikel worden getoond, zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

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

Tijdstempel:

Meer van Analytics Vidhya