logo

K betyr Clustering – Introduksjon

K-Means Clustering er en Maskinlæring uten tilsyn algoritme, som grupperer det umerkede datasettet i forskjellige klynger. Artikkelen tar sikte på å utforske det grunnleggende og virkemåten til k mean clustering sammen med implementeringen.

Innholdsfortegnelse

Hva er K-betyr Clustering?

Maskinlæring uten tilsyn er prosessen med å lære en datamaskin å bruke umerkede, uklassifiserte data og gjøre det mulig for algoritmen å operere på disse dataene uten tilsyn. Uten noen tidligere dataopplæring er maskinens jobb i dette tilfellet å organisere usorterte data i henhold til paralleller, mønstre og variasjoner.



K betyr clustering, tildeler datapunkter til en av K-klyngene avhengig av deres avstand fra midten av klyngene. Det starter med å tilfeldig tildele klyngenes tyngdepunkt i rommet. Deretter tildeles hvert datapunkt til en av klyngen basert på avstanden fra tyngdepunktet til klyngen. Etter å ha tildelt hvert punkt til en av klyngen, tildeles nye klyngecentroider. Denne prosessen går iterativt til den finner en god klynge. I analysen antar vi at antall klynge er gitt i avansert og vi må sette poeng i en av gruppen.

I noen tilfeller er K ikke klart definert, og vi må tenke på det optimale antallet K. K Betyr at klynging gir best data er godt atskilt. Når datapunkter overlappet, er denne klyngingen ikke egnet. K Means er raskere sammenlignet med andre klyngeteknikker. Det gir sterk kobling mellom datapunktene. K Betyr klynge gir ikke klar informasjon om kvaliteten på klynger. Ulik innledende tilordning av klyngetyngdepunkt kan føre til forskjellige klynger. Dessuten er K Means-algoritmen følsom for støy. Det kan ha satt seg fast i lokale minima.

Hva er målet med k-betyr klynging?

Målet med gruppering er å dele befolkningen eller sett av datapunkter inn i et antall grupper slik at datapunktene innenfor hver gruppe er flere sammenlignbare til hverandre og forskjellige fra datapunktene i de andre gruppene. Det er i hovedsak en gruppering av ting basert på hvor like og forskjellige de er til hverandre.

Hvordan fungerer k-betyr clustering?

Vi får et datasett med elementer, med visse funksjoner, og verdier for disse funksjonene (som en vektor). Oppgaven er å kategorisere disse elementene i grupper. For å oppnå dette vil vi bruke K-means-algoritmen, en uovervåket læringsalgoritme. 'K' i navnet på algoritmen representerer antall grupper/klynger vi ønsker å klassifisere elementene våre i.

(Det vil hjelpe hvis du tenker på elementer som punkter i et n-dimensjonalt rom). Algoritmen vil kategorisere elementene i k grupper eller klynger av likhet. For å beregne den likheten vil vi bruke den euklidiske avstanden som et mål.

Algoritmen fungerer som følger:

  1. Først initialiserer vi tilfeldig k punkter, kalt middel eller klyngecentroider.
  2. Vi kategoriserer hvert element til dets nærmeste gjennomsnitt, og vi oppdaterer gjennomsnittets koordinater, som er gjennomsnittene av elementene som er kategorisert i den klyngen så langt.
  3. Vi gjentar prosessen for et gitt antall iterasjoner og på slutten har vi våre klynger.

Punktene nevnt ovenfor kalles middel fordi de er gjennomsnittsverdiene til elementene som er kategorisert i dem. For å initialisere disse midlene har vi mange alternativer. En intuitiv metode er å initialisere midlene ved tilfeldige elementer i datasettet. En annen metode er å initialisere midlene ved tilfeldige verdier mellom grensene til datasettet (hvis for en funksjon x, elementene har verdier i [0,3], vil vi initialisere middelene med verdier for x ved [0,3]).

Algoritmen ovenfor i pseudokode er som følger:

Initialize k means with random values -->For et gitt antall iterasjoner: --> Iterer gjennom elementer: --> Finn gjennomsnittet nærmest elementet ved å beregne den euklidiske avstanden til elementet med hvert av middelene --> Tilordne element til gjennomsnitt --> Oppdater gjennomsnitt ved å flytte den til gjennomsnittet av elementene i den klyngen>

Implementering av K-Means Clustering i Python

Eksempel 1

Importer de nødvendige bibliotekene

Vi importerer Numpy for statistiske beregninger, Matplotlib å plotte kurve, og make_blobs fra sklearn.datasets.

Python3


c#-kodeeksempler



import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets>import> make_blobs>

>

>

Lag det tilpassede datasettet med make_blobs og plott det

Python3




X,y>=> make_blobs(n_samples>=> 500>,n_features>=> 2>,centers>=> 3>,random_state>=> 23>)> fig>=> plt.figure(>0>)> plt.grid(>True>)> plt.scatter(X[:,>0>],X[:,>1>])> plt.show()>

>

>

Produksjon :

Clustering datasett - Geeksforgeeks

Klyngedatasett

Initialiser de tilfeldige centroidene

Koden initialiserer tre klynger for K-betyr clustering. Den setter et tilfeldig frø og genererer tilfeldige klyngesentre innenfor et spesifisert område, og lager et tomt liste poeng for hver klynge.

Python3




k>=> 3> clusters>=> {}> np.random.seed(>23>)> for> idx>in> range>(k):> >center>=> 2>*>(>2>*>np.random.random((X.shape[>1>],))>->1>)> >points>=> []> >cluster>=> {> >'center'> : center,> >'points'> : []> >}> > >clusters[idx]>=> cluster> > clusters>

>

>

Produksjon:

{0: {'center': array([0.06919154, 1.78785042]), 'points': []},  1: {'center': array([ 1.06183904, -0.87041662]), 'points': []},  2: {'center': array([-1.11581855, 0.74488834]), 'points': []}}>

Plott det tilfeldige initialiseringssenteret med datapunkter

Python3




plt.scatter(X[:,>0>],X[:,>1>])> plt.grid(>True>)> for> i>in> clusters:> >center>=> clusters[i][>'center'>]> >plt.scatter(center[>0>],center[>1>],marker>=> '*'>,c>=> 'red'>)> plt.show()>

>

>

Produksjon :

Datapunkter med tilfeldig sentrum - Geeksforgeeks

Datapunkter med tilfeldig sentrum

Plottet viser et spredningsplott av datapunkter (X[:,0], X[:,1]) med rutenettlinjer. Den markerer også de første klyngesentrene (røde stjerner) generert for K-betyr klynging.

Definer euklidisk avstand

Python3




def> distance(p1,p2):> >return> np.sqrt(np.>sum>((p1>->p2)>*>*>2>))>

>

>

Opprett funksjonen for å tildele og oppdatere klyngesenteret

E-steget tildeler datapunkter til nærmeste klyngesenter, og M-steget oppdaterer klyngesentre basert på gjennomsnittet av tildelte punkter i K-betyr klynging.

Python3




#Implementing E step> def> assign_clusters(X, clusters):> >for> idx>in> range>(X.shape[>0>]):> >dist>=> []> > >curr_x>=> X[idx]> > >for> i>in> range>(k):> >dis>=> distance(curr_x,clusters[i][>'center'>])> >dist.append(dis)> >curr_cluster>=> np.argmin(dist)> >clusters[curr_cluster][>'points'>].append(curr_x)> >return> clusters> > #Implementing the M-Step> def> update_clusters(X, clusters):> >for> i>in> range>(k):> >points>=> np.array(clusters[i][>'points'>])> >if> points.shape[>0>]>>0>:> >new_center>=> points.mean(axis>=>0>)> >clusters[i][>'center'>]>=> new_center> > >clusters[i][>'points'>]>=> []> >return> clusters>

string.valueof java
>

>

Trinn 7: Opprett funksjonen for å forutsi klyngen for datapunktene

Python3




def> pred_cluster(X, clusters):> >pred>=> []> >for> i>in> range>(X.shape[>0>]):> >dist>=> []> >for> j>in> range>(k):> >dist.append(distance(X[i],clusters[j][>'center'>]))> >pred.append(np.argmin(dist))> >return> pred>

>

>

Tildel, oppdater og forutsi klyngesenteret

Python3




hei verden java
clusters>=> assign_clusters(X,clusters)> clusters>=> update_clusters(X,clusters)> pred>=> pred_cluster(X,clusters)>

>

>

Plott datapunktene med deres forutsagte klyngesenter

Python3




plt.scatter(X[:,>0>],X[:,>1>],c>=> pred)> for> i>in> clusters:> >center>=> clusters[i][>'center'>]> >plt.scatter(center[>0>],center[>1>],marker>=> '^'>,c>=> 'red'>)> plt.show()>

>

>

Produksjon :

K-betyr Clustering - Geeksforgeeks

K-betyr Clustering

Plottet viser datapunkter farget av deres forutsagte klynger. De røde markørene representerer de oppdaterte klyngesentrene etter E-M-trinnene i K-betyr klyngealgoritmen.

Eksempel 2

Importer de nødvendige bibliotekene

Python3




import> pandas as pd> import> numpy as np> import> seaborn as sns> import> matplotlib.pyplot as plt> import> matplotlib.cm as cm> from> sklearn.datasets>import> load_iris> from> sklearn.cluster>import> KMeans>

>

>

Last inn datasettet

Python3




X, y>=> load_iris(return_X_y>=>True>)>

topologier

>

>

Albuemetode

Å finne det ideelle antallet grupper å dele dataene inn i er et grunnleggende stadium i enhver uovervåket algoritme. En av de vanligste teknikkene for å finne ut denne ideelle verdien av k er albuetilnærmingen.

Python3




#Find optimum number of cluster> sse>=> []>#SUM OF SQUARED ERROR> for> k>in> range>(>1>,>11>):> >km>=> KMeans(n_clusters>=>k, random_state>=>2>)> >km.fit(X)> >sse.append(km.inertia_)>

>

>

Plott albuegrafen for å finne det optimale antallet klynge

Python3




sns.set_style(>'whitegrid'>)> g>=>sns.lineplot(x>=>range>(>1>,>11>), y>=>sse)> g.>set>(xlabel>=>'Number of cluster (k)'>,> >ylabel>=> 'Sum Squared Error'>,> >title>=>'Elbow Method'>)> plt.show()>

>

>

Produksjon:

Albuemetode

Fra grafen ovenfor kan vi observere at ved k=2 og k=3 albuelignende situasjon. Så vi vurderer K=3

Bygg Kmeans-klyngemodellen

Python3




kmeans>=> KMeans(n_clusters>=> 3>, random_state>=> 2>)> kmeans.fit(X)>

>

>

Produksjon:

KMeans KMeans(n_clusters=3, random_state=2)>

Finn klyngesenteret

Python3

sammenlignbar java




kmeans.cluster_centers_>

>

>

Produksjon:

array([[5.006 , 3.428 , 1.462 , 0.246 ],  [5.9016129 , 2.7483871 , 4.39354839, 1.43387097],  [6.85 , 3.07368421, 5.74210526, 2.07105263]])>

Forutsi klyngegruppen:

Python3




pred>=> kmeans.fit_predict(X)> pred>

>

>

Produksjon:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2,  2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 2,  2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1], dtype=int32)>

Plott klyngesenteret med datapunkter

Python3




plt.figure(figsize>=>(>12>,>5>))> plt.subplot(>1>,>2>,>1>)> plt.scatter(X[:,>0>],X[:,>1>],c>=> pred, cmap>=>cm.Accent)> plt.grid(>True>)> for> center>in> kmeans.cluster_centers_:> >center>=> center[:>2>]> >plt.scatter(center[>0>],center[>1>],marker>=> '^'>,c>=> 'red'>)> plt.xlabel(>'petal length (cm)'>)> plt.ylabel(>'petal width (cm)'>)> > plt.subplot(>1>,>2>,>2>)> plt.scatter(X[:,>2>],X[:,>3>],c>=> pred, cmap>=>cm.Accent)> plt.grid(>True>)> for> center>in> kmeans.cluster_centers_:> >center>=> center[>2>:>4>]> >plt.scatter(center[>0>],center[>1>],marker>=> '^'>,c>=> 'red'>)> plt.xlabel(>'sepal length (cm)'>)> plt.ylabel(>'sepal width (cm)'>)> plt.show()>

>

>

Produksjon:

K-betyr clustering - Geeksforgeeks

K-betyr gruppering

Underplottet til venstre viser kronbladlengde vs. kronbladbredde med datapunkter farget av klynger, og røde markører indikerer K-betyr klyngesentre. Underplottet til høyre viser begerbladlengde vs. begerbladbredde på samme måte.

Konklusjon

Avslutningsvis er K-means clustering en kraftig uovervåket maskinlæringsalgoritme for gruppering av umerkede datasett. Målet er å dele data inn i klynger, slik at lignende datapunkter blir en del av samme gruppe. Algoritmen initialiserer klyngecentroider og tildeler iterativt datapunkter til nærmeste tyngdepunkt, og oppdaterer centroider basert på gjennomsnittet av poeng i hver klynge.

Ofte stilte spørsmål (FAQs)

1. Hva er k-betyr clustering for dataanalyse?

K-means er en partisjoneringsmetode som deler et datasett i 'k' distinkte, ikke-overlappende delsett (klynger) basert på likhet, med sikte på å minimere variansen innenfor hver klynge.

2.Hva er et eksempel på k-midler i det virkelige liv?

Kundesegmentering i markedsføring, der k-betyr grupperer kunder basert på kjøpsatferd, slik at virksomheter kan skreddersy markedsføringsstrategier for ulike segmenter.

3. Hvilken type data er k-betyr klyngemodell?

K-means fungerer godt med numeriske data, hvor begrepet avstand mellom datapunkter er meningsfylt. Det brukes ofte på kontinuerlige variabler.

4.Brukes K-midler for prediksjon?

K-means brukes først og fremst til å gruppere og gruppere lignende datapunkter. Den forutsier ikke etiketter for nye data; den tilordner dem til eksisterende klynger basert på likhet.

5.Hva er målet med k-betyr clustering?

Målet er å partisjonere data i 'k'-klynger, og minimere variansen innen klynge. Den søker å danne grupper der datapunkter i hver klynge ligner mer på hverandre enn de i andre klynger.