logo

Hierarkisk klynging i maskinlæring

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:

    Agglomerativ:Agglomerativ er en opp ned tilnærming, der algoritmen starter med å ta alle datapunkter som enkeltklynger og slå dem sammen til en klynge er igjen.Splittende:Delende algoritme er det motsatte av den agglomerative algoritmen som den er en ovenfra og ned tilnærming.

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:

    Trinn 1:Opprett hvert datapunkt som en enkelt klynge. La oss si at det er N datapunkter, så antallet klynger vil også være N.
    Hierarkisk klynging i maskinlæring Steg 2:Ta to nærmeste datapunkter eller klynger og slå dem sammen for å danne en klynge. Så det vil nå være N-1 klynger.
    Hierarkisk klynging i maskinlæring Trinn-3: Igjen, ta de to nærmeste klyngene og slå dem sammen for å danne en klynge. Det vil være N-2 klynger.
    Hierarkisk klynging i maskinlæring Trinn-4:Gjenta trinn 3 til bare én klynge igjen. Så vi får følgende klynger. Tenk på bildene nedenfor:
    Hierarkisk klynging i maskinlæring
    Hierarkisk klynging i maskinlæring
    Hierarkisk klynging i maskinlæring Trinn-5:Når alle klyngene er kombinert til en stor klynge, utvikle dendrogrammet for å dele klyngene i henhold til problemet.

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:

    Enkeltkobling:Det er den korteste avstanden mellom de nærmeste punktene i klyngene. Tenk på bildet nedenfor:
    Hierarkisk klynging i maskinlæring Komplett kobling:Det er den lengste avstanden mellom de to punktene i to forskjellige klynger. Det er en av de populære koblingsmetodene da den danner tettere klynger enn enkeltkobling.
    Hierarkisk klynging i maskinlæring Gjennomsnittlig kobling:Det er koblingsmetoden der avstanden mellom hvert par av datasett legges sammen og deretter divideres med det totale antallet datasett for å beregne gjennomsnittlig avstand mellom to klynger. Det er også en av de mest populære koblingsmetodene.Centroid kobling:Det er koblingsmetoden der avstanden mellom tyngdepunktet til klyngene beregnes. Tenk på bildet nedenfor:
    Hierarkisk klynging i maskinlæring

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:

Hierarkisk klynging i maskinlæring

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:

    Forbehandling av data Finne det optimale antallet klynger ved hjelp av Dendrogrammet Trening av den hierarkiske klyngemodellen Visualisere klyngene

Dataforbehandlingstrinn:

I dette trinnet vil vi importere bibliotekene og datasettene for modellen vår.

    Importerer bibliotekene
 # 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.

    Importerer 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:

Hierarkisk klynging i maskinlæring
    Trekker ut matrisen av funksjoner

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 :

Hierarkisk klynging i maskinlæring

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:

Hierarkisk klynging i maskinlæring

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
    n_clusters=5: Den definerer antall klynger, og vi har her tatt 5 fordi det er det optimale antallet klynger.affinity='euklidisk': Det er en beregning som brukes til å beregne koblingen.linkage='ward': Den definerer koblingskriteriene, her har vi brukt avdelingskoblingen. Denne metoden er den populære koblingsmetoden som vi allerede har brukt for å lage Dendrogrammet. Det reduserer variansen i hver klynge.

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:

Hierarkisk klynging i maskinlæring

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:

Hierarkisk klynging i maskinlæring