logo

Hierarkisk klyngedannelse i maskinlæring

Hierarkisk clustering er en anden uovervåget maskinlæringsalgoritme, som bruges til at gruppere de umærkede datasæt i en klynge og også kendt som hierarkisk klyngeanalyse eller HCA.

I denne algoritme udvikler vi hierarkiet af klynger i form af et træ, og denne træformede struktur er kendt som dendrogram .

Nogle gange kan resultaterne af K-betyder clustering og hierarkisk clustering ligne hinanden, men de er begge forskellige afhængigt af hvordan de fungerer. Da der ikke er noget krav om at forudbestemme antallet af klynger, som vi gjorde i K-Means-algoritmen.

Den hierarkiske klyngeteknik har to tilgange:

    Agglomerativ:Agglomerativ er en bunden i vejret tilgang, hvor algoritmen starter med at tage alle datapunkter som enkelte klynger og flette dem sammen, indtil en klynge er tilbage.Splittende:Delende algoritme er det modsatte af den agglomerative algoritme, da den er en top-down tilgang.

Hvorfor hierarkisk klyngedannelse?

Som vi allerede har andre klyngedannelse algoritmer som f.eks K-Betyder Clustering , hvorfor har vi så brug for hierarkisk clustering? Så som vi har set i K-betyder clustering, er der nogle udfordringer med denne algoritme, som er et forudbestemt antal klynger, og den forsøger altid at skabe klynger af samme størrelse. For at løse disse to udfordringer kan vi vælge den hierarkiske klyngealgoritme, fordi vi i denne algoritme ikke behøver at have viden om det foruddefinerede antal klynger.

I dette emne vil vi diskutere den agglomerative hierarkiske klyngealgoritme.

10 procent af 60

Agglomerativ hierarkisk klyngedannelse

Den agglomerative hierarkiske klyngealgoritme er et populært eksempel på HCA. For at gruppere datasættene i klynger følger den bottom-up tilgang . Det betyder, at denne algoritme betragter hvert datasæt som en enkelt klynge i begyndelsen og derefter begynder at kombinere det nærmeste par af klynger. Det gør det, indtil alle klynger er slået sammen til en enkelt klynge, der indeholder alle datasættene.

Dette hierarki af klynger er repræsenteret i form af dendrogrammet.

Hvordan fungerer den agglomerative hierarkiske klyngedannelse?

Funktionen af ​​AHC-algoritmen kan forklares ved hjælp af nedenstående trin:

    Trin 1:Opret hvert datapunkt som en enkelt klynge. Lad os sige, at der er N datapunkter, så antallet af klynger vil også være N.
    Hierarkisk klyngedannelse i maskinlæring Trin-2:Tag to nærmeste datapunkter eller klynger, og flet dem til en klynge. Så der vil nu være N-1 klynger.
    Hierarkisk klyngedannelse i maskinlæring Trin-3: Tag igen de to nærmeste klynger og flet dem sammen for at danne en klynge. Der vil være N-2 klynger.
    Hierarkisk klyngedannelse i maskinlæring Trin-4:Gentag trin 3, indtil der kun er en klynge tilbage. Så vi får følgende klynger. Overvej nedenstående billeder:
    Hierarkisk klyngedannelse i maskinlæring
    Hierarkisk klyngedannelse i maskinlæring
    Hierarkisk klyngedannelse i maskinlæring Trin-5:Når alle klyngerne er kombineret til en stor klynge, skal du udvikle dendrogrammet for at opdele klyngerne efter problemet.

Bemærk: For bedre at forstå hierarkisk clustering anbefales det at se på k-betyder clustering

Mål for afstanden mellem to klynger

Som vi har set, er nærmeste afstand mellem de to klynger er afgørende for den hierarkiske clustering. Der er forskellige måder at beregne afstanden mellem to klynger på, og disse måder bestemmer reglen for klynger. Disse foranstaltninger kaldes Sammenkoblingsmetoder . Nogle af de populære koblingsmetoder er angivet nedenfor:

    Enkelt kobling:Det er den korteste afstand mellem de nærmeste punkter i klyngerne. Overvej billedet nedenfor:
    Hierarkisk klyngedannelse i maskinlæring Komplet kobling:Det er den fjerneste afstand mellem de to punkter i to forskellige klynger. Det er en af ​​de populære koblingsmetoder, da det danner tættere klynger end enkelt kobling.
    Hierarkisk klyngedannelse i maskinlæring Gennemsnitlig kobling:Det er koblingsmetoden, hvor afstanden mellem hvert par af datasæt lægges sammen og derefter divideres med det samlede antal datasæt for at beregne den gennemsnitlige afstand mellem to klynger. Det er også en af ​​de mest populære koblingsmetoder.Centroid forbindelse:Det er koblingsmetoden, hvor afstanden mellem klyngernes tyngdepunkt beregnes. Overvej billedet nedenfor:
    Hierarkisk klyngedannelse i maskinlæring

Ud fra de ovenfor givne tilgange kan vi anvende enhver af dem i henhold til typen af ​​problem eller forretningskrav.

Woking af Dendrogram i hierarkisk clustering

Dendrogrammet er en trælignende struktur, der hovedsageligt bruges til at gemme hvert trin som en hukommelse, som HC-algoritmen udfører. I dendrogram-plottet viser Y-aksen de euklidiske afstande mellem datapunkterne, og x-aksen viser alle datapunkterne i det givne datasæt.

Dendrogrammets virkemåde kan forklares ved hjælp af nedenstående diagram:

Hierarkisk klyngedannelse i maskinlæring

I ovenstående diagram viser den venstre del, hvordan klynger skabes i agglomerative clustering, og den højre del viser det tilsvarende dendrogram.

  • Som vi har diskuteret ovenfor, kombineres datapunkterne P2 og P3 for det første sammen og danner en klynge, tilsvarende oprettes et dendrogram, som forbinder P2 og P3 med en rektangulær form. Højden bestemmes i henhold til den euklidiske afstand mellem datapunkterne.
  • I næste trin danner P5 og P6 en klynge, og det tilsvarende dendrogram oprettes. Det er højere end tidligere, da den euklidiske afstand mellem P5 og P6 er en lille smule større end P2 og P3.
  • Igen oprettes to nye dendrogrammer, der kombinerer P1, P2 og P3 i et dendrogram og P4, P5 og P6 i et andet dendrogram.
  • Til sidst oprettes det endelige dendrogram, der kombinerer alle datapunkterne.

Vi kan skære dendrogram træstrukturen på ethvert niveau i henhold til vores krav.

Python-implementering af agglomerativ hierarkisk clustering

Nu vil vi se den praktiske implementering af den agglomerative hierarkiske klyngealgoritme ved hjælp af Python. For at implementere dette vil vi bruge det samme datasætproblem, som vi har brugt i det tidligere emne om K-betyder clustering, så vi nemt kan sammenligne begge begreber.

python sortering tuples

Datasættet indeholder oplysninger om kunder, der har besøgt et indkøbscenter for at shoppe. Så indkøbscentrets ejer ønsker at finde nogle mønstre eller en bestemt adfærd hos sine kunder ved at bruge datasætoplysningerne.

Trin til implementering af AHC ved hjælp af Python:

Trinene til implementering vil være de samme som k-betyder clustering, bortset fra nogle ændringer, såsom metoden til at finde antallet af klynger. Nedenfor er trinene:

    Forbehandling af data Find det optimale antal klynger ved hjælp af Dendrogrammet Træning af den hierarkiske klyngemodel Visualisering af klyngerne

Dataforbehandlingstrin:

I dette trin importerer vi bibliotekerne og datasættene til vores model.

    Import af bibliotekerne
 # Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Ovenstående kodelinjer bruges til at importere bibliotekerne til at udføre specifikke opgaver, som f.eks nusset til matematiske operationer, matplotlib til at tegne graferne eller scatter plot, og pandaer til import af datasættet.

    Import af datasættet
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Som diskuteret ovenfor har vi importeret det samme datasæt af Mall_Customers_data.csv, som vi gjorde i k-betyder klyngedannelse. Overvej nedenstående output:

Hierarkisk klyngedannelse i maskinlæring
    Udtræk af matrixen af ​​funktioner

Her vil vi kun udtrække matrixen af ​​funktioner, da vi ikke har yderligere information om den afhængige variabel. Koden er angivet nedenfor:

 x = dataset.iloc[:, [3, 4]].values 

Her har vi kun udtrukket 3 og 4 kolonner, da vi vil bruge et 2D plot til at se klyngerne. Så vi betragter den årlige indkomst- og forbrugsscore som matrixen af ​​funktioner.

numpy unik

Trin-2: Find det optimale antal klynger ved hjælp af Dendrogrammet

Nu vil vi finde det optimale antal klynger ved hjælp af Dendrogrammet til vores model. Til dette skal vi bruge krydret bibliotek, da det giver en funktion, der direkte returnerer dendrogrammet for vores kode. Overvej nedenstående kodelinjer:

 #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 ovenstående kodelinjer har vi importeret hierarki modul af scipy bibliotek. Dette modul giver os en metode shc.denrogram(), som tager linkage() som en parameter. Sammenkædningsfunktionen bruges til at definere afstanden mellem to klynger, så her har vi passeret x(matrixen af ​​funktioner) og metoden ' afdeling ,' den populære metode til kobling i hierarkisk klyngedannelse.

De resterende kodelinjer skal beskrive etiketterne for dendrogramplot.

java samlinger

Produktion:

Ved at udføre ovenstående kodelinjer får vi nedenstående output :

Hierarkisk klyngedannelse i maskinlæring

Ved hjælp af dette Dendrogram vil vi nu bestemme det optimale antal klynger for vores model. Til dette finder vi maksimal lodret afstand der ikke skærer nogen vandret bjælke. Overvej nedenstående diagram:

Hierarkisk klyngedannelse i maskinlæring

I ovenstående diagram har vi vist de lodrette afstande, der ikke skærer deres vandrette stænger. Som vi kan visualisere, er den 4thafstanden ser den maksimale ud, så ifølge dette, antallet af klynger vil være 5 (de lodrette linjer i dette område). Vi kan også tage 2ndtal, da det er omtrent lig med 4thafstand, men vi vil overveje de 5 klynger, fordi det samme vi beregnede i K-middelalgoritmen.

Så det optimale antal klynger vil være 5 , og vi træner modellen i næste trin ved at bruge den samme.

Trin-3: Træning af den hierarkiske klyngemodel

Da vi kender det nødvendige optimale antal klynger, kan vi nu træne vores model. Koden er angivet nedenfor:

 #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 ovenstående kode har vi importeret Agglomerative Clustering klasse af klyngemodul af scikit learning-bibliotek.

Så har vi lavet objektet for denne klasse med navnet as hc. Klassen AgglomerativeClustering tager følgende parametre:

junit test cases
    n_clusters=5: Det definerer antallet af klynger, og vi har her taget 5, fordi det er det optimale antal klynger.affinitet='euklidisk': Det er en metrik, der bruges til at beregne koblingen.linkage='ward': Det definerer koblingskriterierne, her har vi brugt 'ward' koblingen. Denne metode er den populære koblingsmetode, som vi allerede har brugt til at skabe Dendrogrammet. Det reducerer variansen i hver klynge.

I sidste linje har vi lavet den afhængige variabel y_pred for at passe eller træne modellen. Det træner ikke kun modellen, men returnerer også de klynger, som hvert datapunkt tilhører.

Efter at have udført ovenstående kodelinjer, hvis vi går gennem indstillingen for variable explorer i vores Sypder IDE, kan vi kontrollere y_pred-variablen. Vi kan sammenligne det originale datasæt med variablen y_pred. Overvej billedet nedenfor:

Hierarkisk klyngedannelse i maskinlæring

Som vi kan se på billedet ovenfor, er y_pred viser klyngeværdien, hvilket betyder, at kunde-id 1 tilhører 5thklynge (da indeksering starter fra 0, så 4 betyder 5thklynge), tilhører kunde-id 2 til 4thklynge og så videre.

Trin-4: Visualisering af klyngerne

Da vi har trænet vores model med succes, kan vi nu visualisere de klynger, der svarer til datasættet.

Her vil vi bruge de samme linjer kode, som vi gjorde i k-betyder clustering, bortset fra én ændring. Her vil vi ikke plotte det tyngdepunkt, som vi lavede i k-middel, for her har vi brugt dendrogram til at bestemme det optimale antal klynger. Koden er angivet nedenfor:

 #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() 

Output: Ved at udføre ovenstående kodelinjer får vi nedenstående output:

Hierarkisk klyngedannelse i maskinlæring