logo

Hierarkisk klustring i maskininlärning

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:

    Agglomerativ:Agglomerativ är en botten upp tillvägagångssätt, där algoritmen börjar med att ta alla datapunkter som enskilda kluster och slå samman dem tills ett kluster är kvar.Delande:Delningsalgoritmen är motsatsen till den agglomerativa algoritmen eftersom den är en uppifrån och ner 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:

    Steg 1:Skapa varje datapunkt som ett enda kluster. Låt oss säga att det finns N datapunkter, så antalet kluster kommer också att vara N.
    Hierarkisk klustring i maskininlärning Steg 2:Ta två närmaste datapunkter eller kluster och slå samman dem till ett kluster. Så det kommer nu att finnas N-1-kluster.
    Hierarkisk klustring i maskininlärning Steg 3: Återigen, ta de två närmaste klustren och slå samman dem för att bilda ett kluster. Det kommer att finnas N-2-kluster.
    Hierarkisk klustring i maskininlärning Steg-4:Upprepa steg 3 tills bara ett kluster kvar. Så vi kommer att få följande kluster. Tänk på bilderna nedan:
    Hierarkisk klustring i maskininlärning
    Hierarkisk klustring i maskininlärning
    Hierarkisk klustring i maskininlärning Steg-5:När alla kluster har kombinerats till ett stort kluster, utveckla dendrogrammet för att dela upp klustren enligt problemet.

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:

    Enkel länk:Det är det kortaste avståndet mellan de närmaste punkterna i klustren. Tänk på bilden nedan:
    Hierarkisk klustring i maskininlärning Komplett koppling:Det är det längsta avståndet mellan de två punkterna i två olika kluster. Det är en av de populära länkmetoderna eftersom den bildar tätare kluster än enkellänkning.
    Hierarkisk klustring i maskininlärning Genomsnittlig koppling:Det är länkmetoden där avståndet mellan varje par av datamängder adderas och sedan divideras med det totala antalet datamängder för att beräkna det genomsnittliga avståndet mellan två kluster. Det är också en av de mest populära länkmetoderna.Centroid länkage:Det är länkmetoden där avståndet mellan tyngdpunkten i klustren beräknas. Tänk på bilden nedan:
    Hierarkisk klustring i maskininlärning

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:

Hierarkisk klustring i maskininlärning

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:

    Dataförbehandling Hitta det optimala antalet kluster med hjälp av dendrogrammet Utbildning av den hierarkiska klustringsmodellen Visualisera klustren

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.

    Importera biblioteken
 # 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.

    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:

Hierarkisk klustring i maskininlärning
    Extrahera matrisen av funktioner

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 :

Hierarkisk klustring i maskininlärning

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:

Hierarkisk klustring i maskininlärning

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:

    n_clusters=5: Den definierar antalet kluster, och vi har tagit här 5 eftersom det är det optimala antalet kluster.affinitet='euklidisk': Det är ett mått som används för att beräkna länkningen.linkage='ward': Den definierar kopplingskriterierna, här har vi använt avdelningskopplingen. Denna metod är den populära länkmetoden som vi redan har använt för att skapa Dendrogrammet. Det minskar variansen i varje kluster.

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
Hierarkisk klustring i maskininlärning

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:

Hierarkisk klustring i maskininlärning