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?
- Hva er målet med k-betyr klynging?
- Hvordan fungerer k-betyr clustering?
- Implementering av K-Means Clustering i Python
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:
- Først initialiserer vi tilfeldig k punkter, kalt middel eller klyngecentroider.
- 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.
- 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 :

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
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
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 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.