Hierarkisk clustering er en annen uovervåket maskinlæringsalgoritme, som brukes til å gruppere de umerkede datasettene i en klynge og også kjent som hierarkisk klyngeanalyse eller HCA.
I denne algoritmen utvikler vi hierarkiet av klynger i form av et tre, og denne treformede strukturen er kjent som dendrogram .
Noen ganger kan resultatene av K-betyr clustering og hierarkisk clustering se like ut, men de er begge forskjellige avhengig av hvordan de fungerer. Siden det ikke er noe krav om å forhåndsbestemme antall klynger slik vi gjorde i K-Means-algoritmen.
Den hierarkiske klyngeteknikken har to tilnærminger:
Hvorfor hierarkisk klynging?
Som vi allerede har andre gruppering algoritmer som f.eks K-Means Clustering , hvorfor trenger vi hierarkisk klynging? Så, som vi har sett i K-betyr clustering at det er noen utfordringer med denne algoritmen, som er et forhåndsbestemt antall klynger, og den prøver alltid å lage klynger av samme størrelse. For å løse disse to utfordringene kan vi velge den hierarkiske klyngealgoritmen fordi vi i denne algoritmen ikke trenger å ha kunnskap om det forhåndsdefinerte antallet klynger.
I dette emnet vil vi diskutere den agglomerative hierarkiske klyngealgoritmen.
10 prosent av 60
Agglomerativ hierarkisk klynging
Den agglomerative hierarkiske klyngealgoritmen er et populært eksempel på HCA. For å gruppere datasettene i klynger, følger den nedenfra og opp tilnærming . Det betyr at denne algoritmen vurderer hvert datasett som en enkelt klynge i begynnelsen, og deretter begynner å kombinere det nærmeste paret med klynger. Det gjør dette til alle klyngene er slått sammen til en enkelt klynge som inneholder alle datasettene.
Dette hierarkiet av klynger er representert i form av dendrogrammet.
Hvordan fungerer den agglomerative hierarkiske klyngingen?
Virkemåten til AHC-algoritmen kan forklares ved å bruke trinnene nedenfor:
Merk: For bedre å forstå hierarkisk clustering, anbefales det å ta en titt på k-betyr clustering
Mål for avstanden mellom to klynger
Som vi har sett, er nærmeste avstand mellom de to klyngene er avgjørende for den hierarkiske klyngingen. Det er ulike måter å beregne avstanden mellom to klynger på, og disse måtene bestemmer regelen for clustering. Disse tiltakene kalles Koblingsmetoder . Noen av de populære koblingsmetodene er gitt nedenfor:
Fra de ovenfor angitte tilnærmingene kan vi bruke hvilken som helst av dem i henhold til typen problem eller forretningskrav.
Woking av Dendrogram i hierarkisk clustering
Dendrogrammet er en trelignende struktur som hovedsakelig brukes til å lagre hvert trinn som et minne som HC-algoritmen utfører. I dendrogramplottet viser Y-aksen de euklidiske avstandene mellom datapunktene, og x-aksen viser alle datapunktene til det gitte datasettet.
Dendrogrammets virkemåte kan forklares ved hjelp av diagrammet nedenfor:
I diagrammet ovenfor viser venstre del hvordan klynger skapes i agglomerativ klynger, og høyre del viser det tilsvarende dendrogrammet.
- Som vi har diskutert ovenfor, for det første kombineres datapunktene P2 og P3 sammen og danner en klynge, tilsvarende opprettes et dendrogram, som forbinder P2 og P3 med en rektangulær form. Høyden bestemmes i henhold til den euklidiske avstanden mellom datapunktene.
- I neste trinn danner P5 og P6 en klynge, og det tilsvarende dendrogrammet opprettes. Den er høyere enn tidligere, ettersom den euklidiske avstanden mellom P5 og P6 er litt større enn P2 og P3.
- Igjen opprettes to nye dendrogrammer som kombinerer P1, P2 og P3 i ett dendrogram, og P4, P5 og P6, i et annet dendrogram.
- Til slutt opprettes det endelige dendrogrammet som kombinerer alle datapunktene.
Vi kan kutte dendrogram-trestrukturen på alle nivåer i henhold til våre krav.
Python-implementering av agglomerativ hierarkisk klynging
Nå skal vi se den praktiske implementeringen av den agglomerative hierarkiske klyngealgoritmen ved bruk av Python. For å implementere dette vil vi bruke det samme datasettproblemet som vi har brukt i det forrige emnet K-betyr clustering slik at vi enkelt kan sammenligne begge konseptene.
python sortering tuples
Datasettet inneholder informasjon om kunder som har besøkt et kjøpesenter for å handle. Så kjøpesentereieren ønsker å finne noen mønstre eller en bestemt oppførsel til kundene sine ved å bruke datasettinformasjonen.
Trinn for implementering av AHC ved hjelp av Python:
Trinnene for implementering vil være de samme som k-betyr clustering, bortsett fra noen endringer som metoden for å finne antall klynger. Nedenfor er trinnene:
Dataforbehandlingstrinn:
I dette trinnet vil vi importere bibliotekene og datasettene for modellen vår.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
Kodelinjene ovenfor brukes til å importere bibliotekene for å utføre spesifikke oppgaver, som f.eks nusset for matematiske operasjoner, matplotlib for å tegne grafene eller spredningsplottet, og pandaer for å importere datasettet.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Som diskutert ovenfor har vi importert det samme datasettet av Mall_Customers_data.csv, som vi gjorde i k-betyr gruppering. Tenk på utgangen nedenfor:
Her vil vi kun trekke ut matrisen av funksjoner da vi ikke har ytterligere informasjon om den avhengige variabelen. Koden er gitt nedenfor:
x = dataset.iloc[:, [3, 4]].values
Her har vi kun hentet ut 3 og 4 kolonner da vi skal bruke et 2D-plott for å se klyngene. Så vi vurderer den årlige inntekts- og utgiftspoengsummen som matrisen av funksjoner.
numpy unik
Trinn-2: Finn det optimale antallet klynger ved hjelp av Dendrogrammet
Nå vil vi finne det optimale antallet klynger ved å bruke Dendrogrammet for vår modell. Til dette skal vi bruke scipy biblioteket da det gir en funksjon som direkte returnerer dendrogrammet for koden vår. Tenk på kodelinjene nedenfor:
#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 kodelinjene ovenfor har vi importert hierarki modul av scipy bibliotek. Denne modulen gir oss en metode shc.denrogram(), som tar kobling() som en parameter. Koblingsfunksjonen brukes til å definere avstanden mellom to klynger, så her har vi passert x(matrisen av funksjoner), og metoden ' avdeling ,' den populære metoden for kobling i hierarkisk clustering.
De resterende kodelinjene skal beskrive etikettene for dendrogramplotten.
java samlinger
Produksjon:
Ved å utføre kodelinjene ovenfor, får vi utdataene nedenfor :
Ved å bruke dette Dendrogrammet vil vi nå bestemme det optimale antallet klynger for modellen vår. For dette vil vi finne maksimal vertikal avstand som ikke kutter noen horisontal stang. Tenk på diagrammet nedenfor:
I diagrammet ovenfor har vi vist de vertikale avstandene som ikke skjærer sine horisontale stenger. Som vi kan visualisere, 4thavstanden ser maksimalt ut, så ifølge dette, antall klynger vil være 5 (de vertikale linjene i dette området). Vi kan også ta 2ndtallet da det er omtrent lik 4thavstand, men vi vil vurdere de 5 klynger fordi det samme vi beregnet i K-middelalgoritmen.
Så det optimale antallet klynger vil være 5 , og vi vil trene modellen i neste trinn, ved å bruke den samme.
Trinn-3: Trening av den hierarkiske klyngemodellen
Ettersom vi vet det nødvendige optimale antallet klynger, kan vi nå trene modellen vår. Koden er gitt 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 koden ovenfor har vi importert Agglomerative Clustering klasse av klynge modul av scikit lære bibliotek.
Deretter har vi laget objektet til denne klassen kalt as hc. AgglomerativeClustering-klassen tar følgende parametere:
junitprøvetilfeller
På den siste linjen har vi laget den avhengige variabelen y_pred for å passe eller trene modellen. Den trener ikke bare modellen, men returnerer også klyngene som hvert datapunkt tilhører.
Etter å ha utført kodelinjene ovenfor, hvis vi går gjennom alternativet for variabelutforsker i vår Sypder IDE, kan vi sjekke y_pred-variabelen. Vi kan sammenligne det originale datasettet med variabelen y_pred. Tenk på bildet nedenfor:
Som vi kan se i bildet ovenfor, er y_pred viser klyngeverdien, som betyr at kunde-ID 1 tilhører 5thklynge (ettersom indeksering starter fra 0, så betyr 4 5thcluster), tilhører kunde-ID 2 til 4thklynge og så videre.
Trinn-4: Visualisere klyngene
Ettersom vi har trent modellen vår med suksess, kan vi nå visualisere klyngene som tilsvarer datasettet.
Her vil vi bruke de samme kodelinjene som vi gjorde i k-betyr clustering, bortsett fra én endring. Her vil vi ikke plotte tyngdepunktet som vi gjorde i k-midler, for her har vi brukt dendrogram for å bestemme det optimale antallet klynger. Koden er gitt 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()
Utdata: Ved å utføre kodelinjene ovenfor, vil vi få utgangen nedenfor: