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:
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:
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:
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:
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:
Dataforbehandlingstrin:
I dette trin importerer vi bibliotekerne og datasættene til vores model.
# 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.
# 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:
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 :
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:
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
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:
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: