Hierarkisk klustring är en annan oövervakad maskininlärningsalgoritm, som används för att gruppera omärkta datamängder i ett kluster och även känd som hierarkisk klusteranalys eller HCA.
I denna algoritm utvecklar vi hierarkin av kluster i form av ett träd, och denna trädformade struktur är känd som dendrogram .
knn
Ibland kan resultaten av K-means-klustring och hierarkisk klustring se likadana ut, men de skiljer sig båda åt beroende på hur de fungerar. Eftersom det inte finns något krav på att förbestämma antalet kluster som vi gjorde i K-Means-algoritmen.
Den hierarkiska klustringstekniken har två tillvägagångssätt:
Varför hierarkisk klustring?
Som vi redan har andra klustring algoritmer som t.ex K-Means Clustering , varför behöver vi då hierarkisk klustring? Så, som vi har sett i K-means-klustringen, finns det vissa utmaningar med denna algoritm, som är ett förutbestämt antal kluster, och den försöker alltid skapa kluster av samma storlek. För att lösa dessa två utmaningar kan vi välja den hierarkiska klustringsalgoritmen eftersom vi i denna algoritm inte behöver ha kunskap om det fördefinierade antalet kluster.
I det här ämnet kommer vi att diskutera den agglomerativa hierarkiska klustringsalgoritmen.
Agglomerativ hierarkisk klustring
Den agglomerativa hierarkiska klustringsalgoritmen är ett populärt exempel på HCA. För att gruppera datamängderna i kluster följer den nedifrån och upp tillvägagångssätt . Det betyder att den här algoritmen betraktar varje datauppsättning som ett enda kluster i början och sedan börjar kombinera det närmaste paret av kluster. Det gör detta tills alla kluster är sammanslagna till ett enda kluster som innehåller alla datamängder.
Denna hierarki av kluster representeras i form av dendrogrammet.
Hur fungerar den agglomerativa hierarkiska klustringen?
Hur AHC-algoritmen fungerar kan förklaras med hjälp av följande steg:
Obs: För att bättre förstå hierarkisk klustring, rekommenderas det att ta en titt på k-betyder klustring
Mät avståndet mellan två kluster
Som vi har sett är närmaste avståndet mellan de två klustren är avgörande för den hierarkiska klustringen. Det finns olika sätt att beräkna avståndet mellan två kluster, och dessa sätt avgör regeln för kluster. Dessa åtgärder kallas Kopplingsmetoder . Några av de populära länkmetoderna ges nedan:
Från de ovan givna tillvägagångssätten kan vi tillämpa vilken som helst av dem beroende på typen av problem eller affärsbehov.
Woking av Dendrogram i hierarkisk klustring
Dendrogrammet är en trädliknande struktur som huvudsakligen används för att lagra varje steg som ett minne som HC-algoritmen utför. I dendrogramdiagrammet visar Y-axeln de euklidiska avstånden mellan datapunkterna och x-axeln visar alla datapunkter i den givna datamängden.
Dendrogrammets funktion kan förklaras med hjälp av nedanstående diagram:
I diagrammet ovan visar den vänstra delen hur kluster skapas i agglomerativ klustring, och den högra delen visar motsvarande dendrogram.
- Som vi har diskuterat ovan, för det första kombineras datapunkterna P2 och P3 tillsammans och bildar ett kluster, på motsvarande sätt skapas ett dendrogram, som förbinder P2 och P3 med en rektangulär form. Höjden bestäms enligt det euklidiska avståndet mellan datapunkterna.
- I nästa steg bildar P5 och P6 ett kluster, och motsvarande dendrogram skapas. Det är högre än tidigare, eftersom det euklidiska avståndet mellan P5 och P6 är lite större än P2 och P3.
- Återigen skapas två nya dendrogram som kombinerar P1, P2 och P3 i ett dendrogram och P4, P5 och P6 i ett annat dendrogram.
- Äntligen skapas det slutliga dendrogrammet som kombinerar alla datapunkter tillsammans.
Vi kan kapa dendrogramträdstrukturen på vilken nivå som helst enligt våra krav.
Python-implementering av agglomerativ hierarkisk klustering
Nu kommer vi att se den praktiska implementeringen av den agglomerativa hierarkiska klustringsalgoritmen med Python. För att implementera detta kommer vi att använda samma datauppsättningsproblem som vi har använt i det tidigare ämnet K-means klustring så att vi enkelt kan jämföra båda koncepten.
Datauppsättningen innehåller information om kunder som har besökt ett köpcentrum för att handla. Så köpcentrets ägare vill hitta några mönster eller något särskilt beteende hos sina kunder med hjälp av datauppsättningsinformationen.
Steg för implementering av AHC med Python:
Stegen för implementering kommer att vara desamma som k-betyder klustring, med undantag för vissa ändringar såsom metoden för att hitta antalet kluster. Nedan följer stegen:
Steg för förbehandling av data:
I det här steget kommer vi att importera biblioteken och datauppsättningarna för vår modell.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Ovanstående kodrader används för att importera biblioteken för att utföra specifika uppgifter, som t.ex numpy för matematiska operationer, matplotlib för att rita grafer eller punktdiagram, och pandor för att importera datamängden.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Som diskuterats ovan har vi importerat samma datauppsättning av Mall_Customers_data.csv, som vi gjorde i k-betyder klustring. Tänk på följande utdata:
Här kommer vi bara att extrahera matrisen av funktioner eftersom vi inte har någon ytterligare information om den beroende variabeln. Koden ges nedan:
x = dataset.iloc[:, [3, 4]].values
Här har vi bara extraherat 3 och 4 kolumner eftersom vi kommer att använda en 2D-plot för att se klustren. Så vi överväger den årliga inkomst- och utgiftspoängen som en matris av funktioner.
Steg-2: Hitta det optimala antalet kluster med hjälp av Dendrogrammet
Nu kommer vi att hitta det optimala antalet kluster med hjälp av Dendrogrammet för vår modell. För detta kommer vi att använda krypigt biblioteket eftersom det tillhandahåller en funktion som direkt returnerar dendrogrammet för vår kod. Tänk på kodraderna nedan:
#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()
I ovanstående kodrader har vi importerat hierarki modul av scipy bibliotek. Denna modul ger oss en metod shc.denrogram(), som tar länkning() som en parameter. Länkfunktionen används för att definiera avståndet mellan två kluster, så här har vi passerat x(matrisen av funktioner) och metoden ' avdelning ,' den populära metoden för länkning i hierarkisk klustring.
De återstående kodraderna ska beskriva etiketterna för dendrogramdiagrammet.
Produktion:
Genom att köra ovanstående kodrader får vi utdata nedan :
Med hjälp av detta Dendrogram kommer vi nu att bestämma det optimala antalet kluster för vår modell. För detta kommer vi att hitta maximalt vertikalt avstånd som inte skär någon horisontell stång. Tänk på nedanstående diagram:
I diagrammet ovan har vi visat de vertikala avstånden som inte skär sina horisontella stänger. Som vi kan visualisera, den 4thavståndet ser maximalt ut, så enligt detta, antalet kluster kommer att vara 5 (de vertikala linjerna i detta intervall). Vi kan också ta 2:anndnummer eftersom det är ungefär lika med 4thavstånd, men vi kommer att överväga de 5 klustren eftersom samma vi beräknade i K-medelalgoritmen.
Så det optimala antalet kluster kommer att vara 5 , och vi kommer att träna modellen i nästa steg med densamma.
Steg-3: Utbildning av den hierarkiska klustringsmodellen
Eftersom vi vet det optimala antalet kluster som krävs kan vi nu träna vår modell. Koden ges nedan:
#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)
I koden ovan har vi importerat Agglomerativ klustring klass av klustermodul av scikit lärbibliotek.
Sedan har vi skapat objektet för den här klassen som heter som hc. Klassen AgglomerativeClustering tar följande parametrar:
På sista raden har vi skapat den beroende variabeln y_pred för att passa eller träna modellen. Den tränar inte bara modellen utan returnerar också de kluster som varje datapunkt tillhör.
Efter att ha kört ovanstående kodrader, om vi går igenom alternativet för variabelutforskare i vår Sypder IDE, kan vi kontrollera variabeln y_pred. Vi kan jämföra den ursprungliga datamängden med variabeln y_pred. Tänk på bilden nedan:
sortera java arraylist
Som vi kan se i bilden ovan är y_pred visar klustrets värde, vilket betyder att kund-id 1 tillhör 5:anthkluster (eftersom indexering börjar från 0, så betyder 4 5thkluster), tillhör kund-id 2 4thkluster och så vidare.
Steg-4: Visualisera klustren
Eftersom vi har tränat vår modell framgångsrikt kan vi nu visualisera klustren som motsvarar datasetet.
Här kommer vi att använda samma kodrader som vi gjorde i k-betyder klustring, förutom en ändring. Här kommer vi inte att plotta tyngdpunkten som vi gjorde i k-medel, för här har vi använt dendrogram för att bestämma det optimala antalet kluster. Koden ges nedan:
#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()
Utdata: Genom att köra ovanstående kodrader får vi följande utdata: