logo

K-Means Clustering Algoritme

K-Means Clustering er en uovervåket læringsalgoritme som brukes til å løse klyngeproblemene innen maskinlæring eller datavitenskap. I dette emnet vil vi lære hva som er K-betyr clustering-algoritme, hvordan algoritmen fungerer, sammen med Python-implementeringen av k-means clustering.

Hva er K-Means Algorithm?

K-Means Clustering er en Uovervåket læringsalgoritme , som grupperer det umerkede datasettet i forskjellige klynger. Her definerer K antall forhåndsdefinerte klynger som må opprettes i prosessen, som om K=2 vil det være to klynger, og for K=3 vil det være tre klynger, og så videre.

Det er en iterativ algoritme som deler det umerkede datasettet i k forskjellige klynger på en slik måte at hvert datasett tilhører kun én gruppe som har lignende egenskaper.

Det lar oss gruppere dataene i forskjellige grupper og en praktisk måte å oppdage gruppekategoriene i det umerkede datasettet på egen hånd uten behov for opplæring.

Det er en tyngdepunktbasert algoritme, der hver klynge er assosiert med en tyngdepunkt. Hovedmålet med denne algoritmen er å minimere summen av avstander mellom datapunktet og deres tilsvarende klynger.

Algoritmen tar det umerkede datasettet som input, deler datasettet inn i k-antall klynger, og gjentar prosessen til den ikke finner de beste klynger. Verdien av k bør være forhåndsbestemt i denne algoritmen.

k-betyr gruppering Algoritmen utfører hovedsakelig to oppgaver:

  • Bestemmer den beste verdien for K senterpunkter eller sentroider ved en iterativ prosess.
  • Tildeler hvert datapunkt til dets nærmeste k-senter. De datapunktene som er nær det bestemte k-senteret, lager en klynge.

Derfor har hver klynge datapunkter med noen fellestrekk, og den er borte fra andre klynger.

Diagrammet nedenfor forklarer hvordan K-means Clustering Algoritmen fungerer:

K-Means Clustering Algoritme

Hvordan fungerer K-Means-algoritmen?

Virkemåten til K-Means-algoritmen er forklart i trinnene nedenfor:

Trinn 1: Velg tallet K for å bestemme antall klynger.

Steg 2: Velg tilfeldige K-punkter eller sentroider. (Det kan være annet fra inndatadatasettet).

Trinn-3: Tilordne hvert datapunkt til deres nærmeste tyngdepunkt, som vil danne de forhåndsdefinerte K-klyngene.

Trinn-4: Beregn variansen og plasser et nytt tyngdepunkt for hver klynge.

gratis ipconfig

Trinn-5: Gjenta de tredje trinnene, noe som betyr å tilordne hvert datapunkt til det nye nærmeste tyngdepunktet i hver klynge.

Trinn-6: Hvis det skjer en ny tilordning, gå til trinn 4, ellers gå til FINISH.

Trinn-7 : Modellen er klar.

La oss forstå trinnene ovenfor ved å vurdere de visuelle plottene:

Anta at vi har to variabler M1 og M2. Spredningsplottet for x-y-aksen for disse to variablene er gitt nedenfor:

K-Means Clustering Algoritme
  • La oss ta antall k klynger, dvs. K=2, for å identifisere datasettet og sette dem inn i forskjellige klynger. Det betyr at vi her vil prøve å gruppere disse datasettene i to forskjellige klynger.
  • Vi må velge noen tilfeldige k-punkter eller tyngdepunkt for å danne klyngen. Disse punktene kan enten være punktene fra datasettet eller et hvilket som helst annet punkt. Så her velger vi de to punktene nedenfor som k-punkter, som ikke er en del av datasettet vårt. Tenk på bildet nedenfor:
    K-Means Clustering Algoritme
  • Nå vil vi tilordne hvert datapunkt i spredningsplottet til dets nærmeste K-punkt eller tyngdepunkt. Vi vil beregne det ved å bruke litt matematikk som vi har studert for å beregne avstanden mellom to punkter. Så vi vil tegne en median mellom begge sentroidene. Tenk på bildet nedenfor:
    K-Means Clustering Algoritme

Fra bildet ovenfor er det klart at punkter på venstre side av linjen er nær K1 eller blå tyngdepunkt, og punkter til høyre for linjen er nær den gule tyngdepunktet. La oss farge dem som blå og gule for tydelig visualisering.

ikke null i js
K-Means Clustering Algoritme
  • Ettersom vi trenger å finne den nærmeste klyngen, vil vi gjenta prosessen ved å velge en ny tyngdepunkt . For å velge de nye tyngdepunktene, vil vi beregne tyngdepunktet til disse tyngdepunktene, og vil finne nye tyngdepunkt som nedenfor:
    K-Means Clustering Algoritme
  • Deretter tilordner vi hvert datapunkt til det nye tyngdepunktet. For dette vil vi gjenta den samme prosessen med å finne en medianlinje. Medianen vil være som bildet nedenfor:
    K-Means Clustering Algoritme

Fra bildet ovenfor kan vi se at ett gult punkt er på venstre side av linjen, og to blå punkter er rett til linjen. Så disse tre punktene vil bli tildelt nye sentroider.

K-Means Clustering Algoritme

Ettersom omfordeling har funnet sted, vil vi igjen gå til trinn-4, som er å finne nye centroider eller K-punkter.

  • Vi vil gjenta prosessen ved å finne tyngdepunktet til tyngdepunktene, så de nye tyngdepunktene vil være som vist i bildet nedenfor:
    K-Means Clustering Algoritme
  • Etter hvert som vi fikk de nye centroidene, vil igjen trekke medianlinjen og tilordne datapunktene på nytt. Så bildet blir:
    K-Means Clustering Algoritme
  • Vi kan se i bildet ovenfor; det er ingen forskjellige datapunkter på hver side av linjen, noe som betyr at modellen vår er dannet. Tenk på bildet nedenfor:
    K-Means Clustering Algoritme

Ettersom modellen vår er klar, så kan vi nå fjerne de antatte sentroidene, og de to endelige klyngene vil være som vist i bildet nedenfor:

K-Means Clustering Algoritme

Hvordan velge verdien av 'K antall klynger' i K-betyr Clustering?

Ytelsen til K-betyr klyngealgoritmen avhenger av svært effektive klynger som den danner. Men å velge det optimale antallet klynger er en stor oppgave. Det er noen forskjellige måter å finne det optimale antallet klynger på, men her diskuterer vi den mest hensiktsmessige metoden for å finne antall klynger eller verdien av K. Metoden er gitt nedenfor:

Albuemetode

Albuemetoden er en av de mest populære måtene å finne det optimale antallet klynger på. Denne metoden bruker konseptet WCSS-verdi. WCSS står for Innenfor klyngesummen av kvadrater , som definerer de totale variasjonene i en klynge. Formelen for å beregne verdien av WCSS (for 3 klynger) er gitt nedenfor:

WCSS= ∑Pjeg i klynge 1avstand (PJegC1)2+∑Pjeg i Cluster2avstand (PJegC2)2+∑Pjeg i cluster3avstand (PJegC3)2

I formelen ovenfor for WCSS,

Pjeg i klynge 1avstand (PJegC1)2: Det er summen av kvadratet av avstandene mellom hvert datapunkt og dets tyngdepunkt innenfor en klynge1 og det samme for de to andre leddene.

For å måle avstanden mellom datapunkter og tyngdepunkt, kan vi bruke hvilken som helst metode som euklidisk avstand eller Manhattan-avstand.

For å finne den optimale verdien av klynger, følger albuemetoden trinnene nedenfor:

  • Den utfører K-betyr klynging på et gitt datasett for forskjellige K-verdier (spenner fra 1-10).
  • For hver verdi av K, beregner WCSS-verdien.
  • Tegner en kurve mellom beregnede WCSS-verdier og antall klynger K.
  • Det skarpe bøyningspunktet eller et punkt på plottet ser ut som en arm, da regnes det punktet som den beste verdien av K.

Siden grafen viser den skarpe bøyningen, som ser ut som en albue, er den derfor kjent som albuemetoden. Grafen for albuemetoden ser ut som bildet nedenfor:

K-Means Clustering Algoritme

Merk: Vi kan velge antall klynger lik de gitte datapunktene. Hvis vi velger antall klynger lik datapunktene, blir verdien av WCSS null, og det vil være endepunktet til plottet.

Python Implementering av K-means Clustering Algorithm

I avsnittet ovenfor har vi diskutert K-means-algoritmen, la oss nå se hvordan den kan implementeres ved å bruke Python .

Før implementering, la oss forstå hvilken type problem vi skal løse her. Så vi har et datasett med Mall_Kunder , som er dataene til kunder som besøker kjøpesenteret og bruker der.

I det gitte datasettet har vi Customer_Id, Kjønn, Alder, Årlig inntekt ($) og forbrukspoeng (som er den beregnede verdien av hvor mye en kunde har brukt i kjøpesenteret, jo mer verdi, jo mer har han brukt). Fra dette datasettet må vi beregne noen mønstre, siden det er en uovervåket metode, så vi vet ikke hva vi skal beregne nøyaktig.

Trinnene som skal følges for implementeringen er gitt nedenfor:

javafx på formørkelse
    Forbehandling av data Finne det optimale antallet klynger ved hjelp av albuemetoden Trening av K-means-algoritmen på treningsdatasettet Visualisere klyngene

Trinn-1: Dataforbehandling Trinn

Det første trinnet vil være dataforbehandlingen, slik vi gjorde i våre tidligere emner om regresjon og klassifisering. Men for klyngeproblemet vil det være annerledes enn andre modeller. La oss diskutere det:

    Importerer biblioteker
    Som vi gjorde i tidligere emner, vil vi for det første importere bibliotekene for modellen vår, som er en del av dataforbehandlingen. Koden er gitt nedenfor:
 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

I koden ovenfor er det nusset vi har importert for å utføre matematikkberegningen, matplotlib er for å plotte grafen, og pandaer er for å administrere datasettet.

    Importere datasettet:
    Deretter vil vi importere datasettet som vi må bruke. Så her bruker vi Mall_Customer_data.csv datasettet. Den kan importeres ved å bruke koden nedenfor:
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Ved å utføre kodelinjene ovenfor, får vi datasettet vårt i Spyder IDE. Datasettet ser ut som bildet nedenfor:

K-Means Clustering Algoritme

Fra datasettet ovenfor må vi finne noen mønstre i det.

    Trekke ut uavhengige variabler

Her trenger vi ingen avhengig variabel for dataforbehandlingstrinn da det er et klyngeproblem, og vi har ingen anelse om hva vi skal bestemme. Så vi vil bare legge til en kodelinje for matrisen av funksjoner.

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

Som vi kan se, trekker vi ut bare 3rdog 4thtrekk. Det er fordi vi trenger et 2d-plott for å visualisere modellen, og noen funksjoner er ikke nødvendige, for eksempel kunde_id.

Trinn-2: Finne det optimale antallet klynger ved hjelp av albuemetoden

I det andre trinnet vil vi prøve å finne det optimale antallet klynger for klyngeproblemet vårt. Så, som diskutert ovenfor, her skal vi bruke albuemetoden til dette formålet.

Som vi vet bruker albuemetoden WCSS-konseptet til å tegne plottet ved å plotte WCSS-verdier på Y-aksen og antall klynger på X-aksen. Så vi skal beregne verdien for WCSS for forskjellige k-verdier fra 1 til 10. Nedenfor er koden for det:

 #finding optimal number of clusters using the elbow method from sklearn.cluster import KMeans wcss_list= [] #Initializing the list for the values of WCSS #Using for loop for iterations from 1 to 10. for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42) kmeans.fit(x) wcss_list.append(kmeans.inertia_) mtp.plot(range(1, 11), wcss_list) mtp.title('The Elobw Method Graph') mtp.xlabel('Number of clusters(k)') mtp.ylabel('wcss_list') mtp.show() 

Som vi kan se i koden ovenfor, har vi brukt KMeans klasse sklearn. klyngebibliotek for å danne klyngene.

Deretter har vi laget wcss_list variabel for å initialisere en tom liste, som brukes til å inneholde verdien til wcss beregnet for forskjellige verdier av k fra 1 til 10.

Etter det har vi initialisert for-løkken for iterasjonen på en annen verdi av k fra 1 til 10; siden for loop i Python, ekskluder den utgående grensen, så det tas som 11 for å inkludere 10thverdi.

Resten av koden er lik som vi gjorde i tidligere emner, ettersom vi har tilpasset modellen på en matrise av funksjoner og deretter plottet grafen mellom antall klynger og WCSS.

Produksjon: Etter å ha utført koden ovenfor, vil vi få utgangen nedenfor:

K-Means Clustering Algoritme

Fra plottet ovenfor kan vi se albuepunktet er på 5. Så antallet klynger her vil være 5.

K-Means Clustering Algoritme

Trinn 3: Trening av K-means-algoritmen på treningsdatasettet

Ettersom vi har fått antall klynger, kan vi nå trene modellen på datasettet.

For å trene modellen vil vi bruke de samme to linjene med kode som vi har brukt i avsnittet ovenfor, men her i stedet for å bruke i, vil vi bruke 5, da vi vet det er 5 klynger som må dannes. Koden er gitt nedenfor:

 #training the K-means model on a dataset kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42) y_predict= kmeans.fit_predict(x) 

Den første linjen er den samme som ovenfor for å lage objektet til KMeans-klassen.

I den andre kodelinjen har vi laget den avhengige variabelen y_forutsi å trene modellen.

Ved å utføre kodelinjene ovenfor vil vi få y_predict-variabelen. Vi kan sjekke det under variabelutforskeren alternativet i Spyder IDE. Vi kan nå sammenligne verdiene til y_predict med vårt originale datasett. Tenk på bildet nedenfor:

K-Means Clustering Algoritme

Fra bildet ovenfor kan vi nå fortelle at CustomerID 1 tilhører en klynge

3 (da indeksen starter fra 0, vil derfor 2 betraktes som 3), og 2 tilhører klynge 4, og så videre.

Trinn 4: Visualisering av klyngene

Det siste trinnet er å visualisere klyngene. Siden vi har 5 klynger for modellen vår, vil vi visualisere hver klynge en etter en.

For å visualisere klyngene vil du bruke spredningsplott ved å bruke mtp.scatter() funksjonen til matplotlib.

binært tre vs binært søketre
 #visulaizing the clusters mtp.scatter(x[y_predict == 0, 0], x[y_predict == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') #for first cluster mtp.scatter(x[y_predict == 1, 0], x[y_predict == 1, 1], s = 100, c = 'green', label = 'Cluster 2') #for second cluster mtp.scatter(x[y_predict== 2, 0], x[y_predict == 2, 1], s = 100, c = 'red', label = 'Cluster 3') #for third cluster mtp.scatter(x[y_predict == 3, 0], x[y_predict == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') #for fourth cluster mtp.scatter(x[y_predict == 4, 0], x[y_predict == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') #for fifth cluster mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroid') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show() 

I kodelinjene ovenfor har vi skrevet kode for hver klynger, fra 1 til 5. Den første koordinaten til mtp.scatter, dvs. x[y_predict == 0, 0] som inneholder x-verdien for å vise matrisen til har verdier, og y_predict varierer fra 0 til 1.

Produksjon:

K-Means Clustering Algoritme

Utgangsbildet viser tydelig de fem forskjellige klyngene med forskjellige farger. Klyngene dannes mellom to parametere i datasettet; Årlig inntekt av kunde og forbruk. Vi kan endre farger og etiketter i henhold til krav eller valg. Vi kan også observere noen punkter fra mønstrene ovenfor, som er gitt nedenfor:

    Klynge 1viser kundene med gjennomsnittslønn og gjennomsnittlig forbruk slik at vi kan kategorisere disse kundene som
  • Cluster2 viser at kunden har høy inntekt, men lavt forbruk, så vi kan kategorisere dem som forsiktig .
  • Cluster3 viser lave inntekter og også lave utgifter, slik at de kan kategoriseres som fornuftige.
  • Cluster4 viser kundene med lav inntekt med svært høye utgifter slik at de kan kategoriseres som uforsiktig .
  • Cluster5 viser kundene med høy inntekt og høye utgifter slik at de kan kategoriseres som mål, og disse kundene kan være de mest lønnsomme kundene for kjøpesentereieren.