logo

K-Means Clustering Algoritme

K-Means Clustering er en uovervåget læringsalgoritme, der bruges til at løse klyngeproblemer inden for maskinlæring eller datavidenskab. I dette emne vil vi lære, hvad der er K-betyder klyngealgoritme, hvordan algoritmen virker, sammen med Python-implementeringen af ​​k-betyder klyngedannelse.

Hvad er K-Means Algorithm?

K-Means Clustering er en Uovervåget læringsalgoritme , som grupperer det umærkede datasæt i forskellige klynger. Her definerer K antallet af foruddefinerede klynger, der skal oprettes i processen, som om K=2, vil der være to klynger, og for K=3 vil der være tre klynger, og så videre.

Det er en iterativ algoritme, der opdeler det umærkede datasæt i k forskellige klynger på en sådan måde, at hvert datasæt kun tilhører én gruppe, der har lignende egenskaber.

Det giver os mulighed for at gruppere dataene i forskellige grupper og en bekvem måde at opdage kategorierne af grupper i det umærkede datasæt på egen hånd uden behov for træning.

Det er en tyngdepunktsbaseret algoritme, hvor hver klynge er forbundet med en tyngdepunkt. Hovedformålet med denne algoritme er at minimere summen af ​​afstande mellem datapunktet og deres tilsvarende klynger.

Algoritmen tager det umærkede datasæt som input, opdeler datasættet i et k-antal af klynger og gentager processen, indtil den ikke finder de bedste klynger. Værdien af ​​k bør være forudbestemt i denne algoritme.

k-betyder klyngedannelse Algoritmen udfører hovedsageligt to opgaver:

  • Bestemmer den bedste værdi for K midtpunkter eller tyngdepunkter ved en iterativ proces.
  • Tildeler hvert datapunkt til dets nærmeste k-center. De datapunkter, der er tæt på det bestemte k-center, skaber en klynge.

Derfor har hver klynge datapunkter med nogle fællestræk, og den er væk fra andre klynger.

Nedenstående diagram forklarer, hvordan K-means Clustering Algorithm fungerer:

K-Means Clustering Algoritme

Hvordan virker K-Means-algoritmen?

Funktionen af ​​K-Means-algoritmen forklares i nedenstående trin:

Trin 1: Vælg tallet K for at bestemme antallet af klynger.

Trin-2: Vælg tilfældige K-punkter eller tyngdepunkter. (Det kan være andet fra inputdatasættet).

Trin-3: Tildel hvert datapunkt til deres nærmeste tyngdepunkt, som danner de foruddefinerede K-klynger.

Trin-4: Beregn variansen og placer et nyt tyngdepunkt for hver klynge.

eksekver script shell

Trin-5: Gentag de tredje trin, hvilket betyder at tildele hvert datapunkt til det nye nærmeste tyngdepunkt i hver klynge.

Trin-6: Hvis der sker en omfordeling, skal du gå til trin-4, ellers gå til FINISH.

Trin-7 : Modellen er klar.

Lad os forstå ovenstående trin ved at overveje de visuelle plots:

Antag, at vi har to variable M1 og M2. x-y-aksespredningsplottet for disse to variable er givet nedenfor:

K-Means Clustering Algoritme
  • Lad os tage antallet k klynger, dvs. K=2, for at identificere datasættet og placere dem i forskellige klynger. Det betyder, at vi her vil forsøge at gruppere disse datasæt i to forskellige klynger.
  • Vi skal vælge nogle tilfældige k-punkter eller tyngdepunkt for at danne klyngen. Disse punkter kan enten være punkterne fra datasættet eller et hvilket som helst andet punkt. Så her vælger vi nedenstående to punkter som k-punkter, som ikke er en del af vores datasæt. Overvej billedet nedenfor:
    K-Means Clustering Algoritme
  • Nu vil vi tildele hvert datapunkt i spredningsplottet til dets nærmeste K-punkt eller tyngdepunkt. Vi vil beregne det ved at anvende noget matematik, som vi har studeret, til at beregne afstanden mellem to punkter. Så vi vil tegne en median mellem begge tyngdepunkter. Overvej billedet nedenfor:
    K-Means Clustering Algoritme

Fra ovenstående billede er det klart, at punkter på venstre side af linjen er tæt på K1 eller blå tyngdepunkt, og punkter til højre for linjen er tæt på den gule tyngdepunkt. Lad os farve dem som blå og gule for klar visualisering.

ikke null i js
K-Means Clustering Algoritme
  • Da vi skal finde den nærmeste klynge, så vil vi gentage processen ved at vælge en ny tyngdepunkt . For at vælge de nye tyngdepunkter, vil vi beregne tyngdepunktet for disse tyngdepunkter, og vi vil finde nye tyngdepunkter som nedenfor:
    K-Means Clustering Algoritme
  • Dernæst vil vi omtildele hvert datapunkt til det nye tyngdepunkt. Til dette vil vi gentage den samme proces med at finde en medianlinje. Medianen vil være som under billedet:
    K-Means Clustering Algoritme

Fra ovenstående billede kan vi se, at et gult punkt er på venstre side af linjen, og to blå punkter er lige til linjen. Så disse tre punkter vil blive tildelt nye tyngdepunkter.

K-Means Clustering Algoritme

Da omfordeling har fundet sted, så vil vi igen gå til trin-4, som er at finde nye centroider eller K-punkter.

  • Vi vil gentage processen ved at finde tyngdepunktet for tyngdepunkter, så de nye tyngdepunkter vil være som vist på billedet nedenfor:
    K-Means Clustering Algoritme
  • Efterhånden som vi fik de nye tyngdepunkter, så vil igen tegne medianlinjen og omtildele datapunkterne. Så billedet bliver:
    K-Means Clustering Algoritme
  • Vi kan se på ovenstående billede; der er ingen uens datapunkter på begge sider af linjen, hvilket betyder, at vores model er dannet. Overvej billedet nedenfor:
    K-Means Clustering Algoritme

Da vores model er klar, så kan vi nu fjerne de antagne tyngdepunkter, og de to endelige klynger vil være som vist på billedet nedenfor:

K-Means Clustering Algoritme

Hvordan vælger man værdien af ​​'K antal klynger' i K-betyder Clustering?

Ydeevnen af ​​K-betyder klyngealgoritmen afhænger af højeffektive klynger, som den danner. Men at vælge det optimale antal klynger er en stor opgave. Der er nogle forskellige måder at finde det optimale antal klynger på, men her diskuterer vi den mest passende metode til at finde antallet af klynger eller værdien af ​​K. Metoden er angivet nedenfor:

Albue metode

Albuemetoden er en af ​​de mest populære måder at finde det optimale antal klynger på. Denne metode bruger konceptet WCSS-værdi. WCSS står for Inden for klynge Sum af kvadrater , som definerer de samlede variationer inden for en klynge. Formlen til at beregne værdien af ​​WCSS (for 3 klynger) er givet nedenfor:

WCSS= ∑Pi i klynge 1afstand (PjegC1)2+∑Pi i klynge 2afstand (PjegC2)2+∑Pi i Cluster3afstand (PjegC3)2

I ovenstående formel for WCSS,

Pi i klynge 1afstand (PjegC1)2: Det er summen af ​​kvadratet af afstandene mellem hvert datapunkt og dets tyngdepunkt inden for en klynge1 og det samme for de to andre led.

For at måle afstanden mellem datapunkter og tyngdepunkt kan vi bruge enhver metode, såsom euklidisk afstand eller Manhattan-afstand.

For at finde den optimale værdi af klynger følger albuemetoden nedenstående trin:

  • Den udfører K-betyder-klyngning på et givet datasæt for forskellige K-værdier (spænder fra 1-10).
  • For hver værdi af K beregnes WCSS-værdien.
  • Plot en kurve mellem beregnede WCSS-værdier og antallet af klynger K.
  • Det skarpe bøjningspunkt eller et punkt på plottet ligner en arm, så det punkt betragtes som den bedste værdi af K.

Da grafen viser den skarpe bøjning, der ligner en albue, er den derfor kendt som albuemetoden. Grafen for albuemetoden ser ud som nedenstående billede:

K-Means Clustering Algoritme

Bemærk: Vi kan vælge antallet af klynger svarende til de givne datapunkter. Hvis vi vælger antallet af klynger svarende til datapunkterne, så bliver værdien af ​​WCSS nul, og det vil være endepunktet for plottet.

Python Implementering af K-means Clustering Algorithm

I ovenstående afsnit har vi diskuteret K-means-algoritmen, lad os nu se, hvordan den kan implementeres vha. Python .

Før implementering, lad os forstå, hvilken type problem vi vil løse her. Så vi har et datasæt af Indkøbscenter_Kunder , som er data for kunder, der besøger indkøbscenteret og bruger der.

I det givne datasæt har vi Kunde_id, køn, alder, årlig indkomst ($) og forbrugsresultat (som er den beregnede værdi af, hvor meget en kunde har brugt i indkøbscentret, jo mere værdi, jo mere har han brugt). Ud fra dette datasæt skal vi beregne nogle mønstre, da det er en uovervåget metode, så vi ved ikke, hvad vi præcis skal beregne.

De trin, der skal følges for implementeringen, er angivet nedenfor:

ændre tilføje kolonne orakel
    Forbehandling af data At finde det optimale antal klynger ved hjælp af albuemetoden Træning af K-means-algoritmen på træningsdatasættet Visualisering af klyngerne

Trin-1: Dataforbehandling Trin

Det første trin vil være dataforbehandlingen, som vi gjorde i vores tidligere emner om regression og klassificering. Men for klyngeproblemet vil det være anderledes end andre modeller. Lad os diskutere det:

    Import af biblioteker
    Som vi gjorde i tidligere emner, vil vi for det første importere bibliotekerne til vores model, som er en del af dataforbehandling. Koden er angivet nedenfor:
 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

I ovenstående kode er nusset vi har importeret til den udførende matematikberegning, matplotlib er til at plotte grafen, og pandaer er til styring af datasættet.

    Import af datasættet:
    Dernæst importerer vi det datasæt, som vi skal bruge. Så her bruger vi Mall_Customer_data.csv-datasættet. Det kan importeres ved hjælp af nedenstående kode:
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Ved at udføre ovenstående kodelinjer får vi vores datasæt i Spyder IDE. Datasættet ser ud som nedenstående billede:

K-Means Clustering Algoritme

Fra ovenstående datasæt skal vi finde nogle mønstre i det.

    Udtræk af uafhængige variabler

Her har vi ikke brug for nogen afhængig variabel til dataforbehandlingstrin, da det er et klyngeproblem, og vi har ingen idé om, hvad vi skal bestemme. Så vi vil blot tilføje en kodelinje til matrixen af ​​funktioner.

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

Som vi kan se, udtrækker vi kun 3rdog 4thfunktion. Det er fordi vi har brug for et 2d plot for at visualisere modellen, og nogle funktioner er ikke nødvendige, såsom kunde_id.

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

I andet trin vil vi forsøge at finde det optimale antal klynger til vores klyngeproblem. Så, som diskuteret ovenfor, skal vi her bruge albuemetoden til dette formål.

Som vi ved, bruger albuemetoden WCSS-konceptet til at tegne plottet ved at plotte WCSS-værdier på Y-aksen og antallet af klynger på X-aksen. Så vi skal beregne værdien for WCSS for forskellige k-værdier fra 1 til 10. Nedenfor er koden til 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 ovenstående kode, har vi brugt KMeans klasse af sklearn. klyngebibliotek for at danne klyngerne.

Dernæst har vi oprettet wcss_list variabel for at initialisere en tom liste, som bruges til at indeholde værdien af ​​wcss beregnet for forskellige værdier af k fra 1 til 10.

Derefter har vi initialiseret for-løkken for iterationen på en anden værdi af k fra 1 til 10; da for loop i Python, ekskluder den udgående grænse, så det tages som 11 for at inkludere 10thværdi.

Resten af ​​koden ligner, som vi gjorde i tidligere emner, da vi har tilpasset modellen på en matrix af funktioner og derefter plottet grafen mellem antallet af klynger og WCSS.

Produktion: Efter at have udført ovenstående kode, får vi nedenstående output:

K-Means Clustering Algoritme

Fra ovenstående plot kan vi se albuepunktet er kl 5. Så antallet af klynger her vil være 5.

K-Means Clustering Algoritme

Trin-3: Træning af K-means-algoritmen på træningsdatasættet

Da vi har fået antallet af klynger, så kan vi nu træne modellen på datasættet.

For at træne modellen vil vi bruge de samme to linjer kode, som vi har brugt i ovenstående afsnit, men her i stedet for i, vil vi bruge 5, da vi ved, at der er 5 klynger, der skal dannes. Koden er angivet 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 linje er den samme som ovenfor for at skabe objektet i KMeans-klassen.

I anden kodelinje har vi oprettet den afhængige variabel y_forudsige at træne modellen.

Ved at udføre ovenstående kodelinjer får vi variablen y_predict. Vi kan tjekke det under variable explorer mulighed i Spyder IDE. Vi kan nu sammenligne værdierne af y_predict med vores originale datasæt. Overvej billedet nedenfor:

K-Means Clustering Algoritme

Fra ovenstående billede kan vi nu relatere, at CustomerID 1 tilhører en klynge

3 (da indeks starter fra 0, vil 2 derfor blive betragtet som 3), og 2 hører til klynge 4, og så videre.

Trin-4: Visualisering af klyngerne

Det sidste trin er at visualisere klyngerne. Da vi har 5 klynger til vores model, så vil vi visualisere hver klynge en efter en.

For at visualisere klyngerne bruger man scatter-plot ved hjælp af mtp.scatter()-funktionen af ​​matplotlib.

hashset vs hashmap
 #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 ovenstående kodelinjer har vi skrevet kode for hver klynger, der spænder fra 1 til 5. Den første koordinat af mtp.scatter, dvs. x[y_predict == 0, 0], der indeholder x-værdien for at vise matrixen for indeholder værdier, og y_predict varierer fra 0 til 1.

Produktion:

K-Means Clustering Algoritme

Outputbilledet viser tydeligt de fem forskellige klynger med forskellige farver. Klyngerne er dannet mellem to parametre i datasættet; Årlig indkomst af kunde og forbrug. Vi kan ændre farver og etiketter i henhold til krav eller valg. Vi kan også observere nogle punkter fra ovenstående mønstre, som er givet nedenfor:

    Klynge 1viser kunderne med gennemsnitsløn og gennemsnitsforbrug, så vi kan kategorisere disse kunder som
  • Cluster2 viser, at kunden har en høj indkomst, men lavt forbrug, så vi kan kategorisere dem som forsigtig .
  • Cluster3 viser den lave indkomst og også lave udgifter, så de kan kategoriseres som fornuftige.
  • Cluster4 viser kunderne med lav indkomst med meget høje forbrug, så de kan kategoriseres som ligegyldig .
  • Cluster5 viser kunderne med høj indkomst og højt forbrug, så de kan kategoriseres som mål, og disse kunder kan være de mest profitable kunder for indkøbscentrets ejer.