Hierarkisk klusteralgoritm Python!

Källnod: 1055669

Denna artikel publicerades som en del av Data Science Blogathon

Beskrivning

I den här artikeln kommer vi att titta på ett annat tillvägagångssätt för K Means-klustring som kallas hierarkisk klustring. I jämförelse med K Means eller K Mode har hierarkisk klustring en annan underliggande algoritm för hur klustringsmekanismen fungerar. Hierarkisk klustring använder agglomerativa eller splittande tekniker, medan K Means använder en kombination av tyngdpunkts- och euklidiskt avstånd för att bilda kluster. Dendrogram kan användas för att visualisera kluster i hierarkisk klustring, vilket kan hjälpa till med en bättre tolkning av resultat genom meningsfulla taxonomier. Vi behöver inte ange antalet kluster när vi gör ett dendrogram.

Här använder vi Python för att förklara den hierarkiska klustringsmodellen. Vi har 200 köpcentrumkunders data i vår datauppsättning. Varje kunds kund-ID, genre, ålder, årsinkomst och utgiftspoäng ingår i dataramen. Beloppet som beräknas för var och en av deras kunders utgiftspoäng baseras på flera kriterier, såsom deras inkomst, antalet gånger per vecka de besöker gallerian och hur mycket pengar de spenderade under ett år. Denna poäng varierar från 1 till 100. Eftersom vi inte vet svaren blir ett affärsproblem ett klusterproblem. Datas slutliga kategorier är okända för oss. Som ett resultat är vårt mål att upptäcka några tidigare okända kundkluster.

Men först tittar vi på några viktiga termer i hierarkisk klustring.

Viktiga termer i hierarkisk klustring

Länkningsmetoder

Om det finns (a) ursprungliga observationer a[0],...,a[|a|1] i kluster (a) och (b) ursprungliga objekt b[0],...,b[|b|1] i kluster ( b), då måste vi beräkna avståndet mellan två kluster (a) och (b) för att kombinera dem (b). Låt oss säga att det finns en punkt (d) som inte har tilldelats något av klustren. Vi måste ta reda på hur långt kluster (a) är från klustret (d) och kluster (b) är från klustret (d).

Kluster innehåller nu vanligtvis flera punkter, vilket kräver en annan metod för att beräkna avståndsmatrisen. Metoden med vilken avståndet mellan kluster, eller punkt till kluster avstånd, beräknas bestäms av länkning. Följande är några av de mest använda länkmekanismerna:

Enkel länk — Avstånden mellan de mest lika medlemmarna beräknas för varje par av kluster, och klustren slås sedan samman baserat på det kortaste avståndet.

Genomsnittlig koppling — Avståndet mellan alla medlemmar i ett kluster och alla medlemmar i ett annat kluster beräknas. Därefter används medelvärdet av dessa avstånd för att bestämma vilka kluster som kommer att slås samman.

Komplett koppling — För varje par av kluster beräknas avstånden mellan de mest olika delarna, och klustren slås sedan samman baserat på det kortaste avståndet.

Mediankoppling — Vi använder medianavståndet istället för medelavståndet på ett liknande sätt som medellänkningen.

Avdelningskoppling — Bestämmer avståndet mellan kluster med hjälp av variansanalysmetoden.

Centroid länkage — Tyngdpunkten för varje kluster beräknas genom att medelvärdet beräknas av alla punkter som tilldelats klustret, och avståndet mellan klustren beräknas sedan med hjälp av denna tyngdpunkt.

Avståndsberäkning

Det finns flera tillvägagångssätt för att beräkna avståndet mellan två eller flera kluster, där euklidisk avstånd är det mest populära. Andra avståndsmått, som Minkowski, City Block, Hamming, Jaccard och Chebyshev, kan också användas med hierarkisk klustring. Olika avståndsmått påverkar hierarkisk klustring, som visas i figur 2.

avståndsberäkning

Dendrogram

Relationen mellan objekt i ett funktionsutrymme representeras av ett dendrogram. I ett funktionsutrymme används det för att visa avståndet mellan varje par av sekventiellt sammanslagna objekt. Dendrogram används ofta för att undersöka hierarkiska kluster innan man bestämmer sig för lämpligt antal kluster för datamängden. Dendrogramavståndet är avståndet mellan två kluster när de kombineras. Dendrogramavståndet bestämmer om två eller flera kluster är osammanhängande eller kan sammanfogas för att bilda ett enda kluster.

Exempelvis

Nu tittar vi på exempel med Python för att demonstrera den hierarkiska klustringsmodellen. Vi har 200 galleriakunders data i vår dataset. Varje kunds kund-ID, genre, ålder, årsinkomst och utgiftspoäng ingår i dataramen. Beloppet som beräknas för var och en av deras kunders utgiftspoäng baseras på flera kriterier, såsom deras inkomst, antalet gånger per vecka de besöker gallerian och de pengar de spenderade under ett år. Denna poäng varierar från 1 till 100. Eftersom vi inte vet svaren blir ett affärsproblem ett klusterproblem.

#1 Importera biblioteken
importera numpy som np importera matplotlib.pyplot som plt importera pandor som pd
#2 Importera Mall_Customers dataset av pandor
dataset = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].values

Detta nya steg i hierarkisk klustring innebär också att bestämma det optimala antalet kluster. Vi kommer inte att använda armbågsmetoden den här gången. Vi kommer att använda dendrogrammet.

#3 Använda dendrogrammet för att hitta det optimala antalet kluster. # Det första vi ska göra är att importera scipy-bibliotek. scipy är ett # Python-bibliotek med öppen källkod som innehåller verktyg för att göra hierarkisk klustring och bygga dendrogram. # Importera bara det nödvändiga verktyget. importera scipy.cluster.hierarchy som sch 
# Låt oss skapa en dendrogramvariabel # länkning är faktiskt själva algoritmen för hierarkisk klustring och sedan i #linkage måste vi specificera vilken data vi tillämpar och engagerar oss på. Detta är X dataset dendrogram = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrogram') plt.xlabel('Customers') plt.ylabel('Euklidiska avstånd') plt. show()

Ward-metoden är en metod som försöker minska variansen inom varje kluster. Det är nästan samma sak som när vi använde K-medel för att minimera wcss för att plotta vårt armbågsmetoddiagram; den enda skillnaden är att istället för wcss, minimerar vi varianterna inom kluster. Inom varje kluster är detta variansen. Dendrogrammet visas nedan.

dendogram

Kunder representeras på x-axeln, och det euklidiska avståndet mellan kluster representeras på y-axeln. Hur tar vi reda på det bästa antalet kluster baserat på detta diagram? Vi vill hitta det längsta vertikala avståndet vi kan utan att korsa några horisontella linjer, vilket är den röda inramade linjen i diagrammet ovan. Låt oss räkna linjerna på diagrammet och räkna ut hur många kluster som är bäst. För denna datauppsättning kommer klusternumret att vara 5.

#4 Anpassa hierarkisk klustring till Mall_Customes-datauppsättningen # Det finns två algoritmer för hierarkisk klustring: agglomerativ hierarkisk klustring och # divisiv hierarkisk klustring. Vi väljer euklidisk avstånds- och avdelningsmetod för vår # algoritmklass från sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euklidisk', länkage ='ward') # Låt oss försöka anpassa den hierarkiska klustringsalgoritmen till dataset X samtidigt som vektorn # kluster skapas som talar om för varje kund vilket kluster kunden tillhör. y_hc=hc.fit_predict(X)
#5 Visualisera klustren. Denna kod liknar k-means visualiseringskod. #Vi ersätter bara vektornamnet y_kmeans till y_hc för den hierarkiska klustringen 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 ='Kluster 5') plt.title('Clusters of Customers (Hierarchical Clustering Model)') plt.xlabel('Annual Income(k$)') plt.ylabel ('Spending Score(1-100') plt.show()
kluster | Hierarkisk klustring
Kluster1 (Röd), Kluster2 (Blå), Kluster3 (Grön), Kluster4 (Cyan), Kluster5 (Magenta)

Dessa kluster kan ses som gallerians kundsegment.

Det är allt som finns i en standard hierarkisk klustringsmodell. Datauppsättningen såväl som alla koder är tillgängliga i Github-sektionen.

Slutsats

I alla klusterövningar är det en tidskrävande process att fastställa antalet kluster. Eftersom den kommersiella sidan av verksamheten är mer angelägen om att utvinna mening från dessa grupper, är det avgörande att visualisera klustren i två dimensioner och se om de är distinkta. PCA eller faktoranalys kan användas för att uppnå detta mål. Detta är en vanlig metod för att presentera slutresultat för olika intressenter, vilket gör det lättare för alla att konsumera resultatet.

EndNote

Tack för att du läste!
Jag hoppas att du gillade artikeln och ökade din kunskap.
Du är välkommen att kontakta mig on E-postadress
Något som inte nämns eller vill dela med dig av dina tankar? Kommentera gärna nedan så återkommer jag till dig.

Om författaren

Hardikkumar M. Dhaduk
Dataanalytiker | Specialist på digital dataanalys | Lärare i datavetenskap
Anslut med mig på LinkedIn
Anslut med mig på Github

Media som visas i denna artikel ägs inte av Analytics Vidhya och används efter författarens gottfinnande.

Källa: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

Tidsstämpel:

Mer från Analys Vidhya