logo

K betyder Clustering – Introduktion

K-Means Clustering är en Maskininlärning utan tillsyn algoritm, som grupperar den omärkta datamängden i olika kluster. Artikeln syftar till att utforska grunderna och hur k mean clustering fungerar tillsammans med implementeringen.

Innehållsförteckning

Vad är K-means Clustering?

Maskininlärning utan tillsyn är processen att lära en dator att använda omärkta, oklassificerade data och göra det möjligt för algoritmen att arbeta på dessa data utan övervakning. Utan någon tidigare dataträning är maskinens uppgift i detta fall att organisera osorterade data enligt paralleller, mönster och variationer.



K betyder klustring, tilldelar datapunkter till ett av K-klustren beroende på deras avstånd från mitten av klustren. Det börjar med att slumpmässigt tilldela klustrens tyngdpunkt i rymden. Sedan tilldelas varje datapunkt till en av klustret baserat på dess avstånd från centroid i klustret. Efter att ha tilldelats varje punkt till en av klustret, tilldelas nya klustercentroider. Denna process körs iterativt tills den hittar ett bra kluster. I analysen antar vi att antalet kluster anges i avancerad och vi måste sätta poäng i en av gruppen.

I vissa fall är K inte klart definierat, och vi måste tänka på det optimala antalet K. K innebär att klustring fungerar bäst att data är väl åtskilda. När datapunkter överlappade är denna klustring inte lämplig. K Means är snabbare jämfört med andra klustringstekniker. Det ger en stark koppling mellan datapunkterna. K Means kluster ger inte tydlig information om kvaliteten på kluster. Olika initial tilldelning av kluster centroid kan leda till olika kluster. Dessutom är K Means-algoritmen känslig för brus. Det kan ha fastnat i lokala minima.

Vad är syftet med k-betyder klustring?

Målet med klustring är att dela befolkningen eller uppsättning av datapunkter i ett antal grupper så att datapunkterna inom varje grupp är fler jämförbar till varandra och skiljer sig från datapunkterna inom de andra grupperna. Det är i huvudsak en gruppering av saker baserade på hur lika och olika de är varandra.

Hur fungerar k-betyder klustring?

Vi får en datamängd med objekt, med vissa funktioner, och värden för dessa funktioner (som en vektor). Uppgiften är att kategorisera dessa objekt i grupper. För att uppnå detta kommer vi att använda K-means-algoritmen, en oövervakad inlärningsalgoritm. 'K' i algoritmens namn representerar antalet grupper/kluster vi vill klassificera våra objekt i.

(Det hjälper om du tänker på objekt som punkter i ett n-dimensionellt utrymme). Algoritmen kommer att kategorisera objekten i k grupper eller kluster av likhet. För att beräkna den likheten kommer vi att använda det euklidiska avståndet som ett mått.

Algoritmen fungerar enligt följande:

  1. Först initialiserar vi slumpmässigt k punkter, kallade medel eller klustercentroider.
  2. Vi kategoriserar varje artikel till dess närmaste medelvärde, och vi uppdaterar medelvärdets koordinater, som är medelvärdena av de poster som hittills har kategoriserats i det klustret.
  3. Vi upprepar processen för ett givet antal iterationer och i slutet har vi våra kluster.

Punkterna som nämns ovan kallas medel eftersom de är medelvärdena för de objekt som kategoriseras i dem. För att initiera dessa medel har vi många alternativ. En intuitiv metod är att initiera medlen vid slumpmässiga poster i datamängden. En annan metod är att initiera medel vid slumpmässiga värden mellan gränserna för datamängden (om det gäller en funktion x, objekten har värden i [0,3], kommer vi att initialisera medel med värden för x vid [0,3]).

Ovanstående algoritm i pseudokod är följande:

Initialize k means with random values -->För ett givet antal iterationer: --> Iterera genom objekt: --> Hitta medelvärdet närmast objektet genom att beräkna det euklidiska avståndet för objektet med vart och ett av medlen --> Tilldela objekt till medelvärde --> Uppdatera medelvärde med flytta det till medelvärdet av objekten i det klustret>

Implementering av K-Means Clustering i Python

Exempel 1

Importera nödvändiga bibliotek

Vi importerar Numpy för statistiska beräkningar, Matplotlib att plotta Graf, och make_blobs från sklearn.datasets.

Python3


c programsträngarray



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

>

>

Skapa den anpassade datamängden med make_blobs och rita den

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()>

>

>

Produktion :

Clustering dataset - Geeksforgeeks

Clustering dataset

Initiera de slumpmässiga tyngdpunkterna

Koden initierar tre kluster för K-means-kluster. Den sätter ett slumpmässigt frö och genererar slumpmässiga klustercentra inom ett specificerat intervall och skapar en tom lista poäng för varje kluster.

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>

>

>

Produktion:

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

Rita det slumpmässiga initialiseringscentret med datapunkter

Python3

är modellexempel




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()>

>

>

Produktion :

Datapunkter med slumpmässigt centrum - Geeksforgeeks

Datapunkter med slumpmässigt centrum

Plottet visar ett spridningsdiagram av datapunkter (X[:,0], X[:,1]) med rutnätslinjer. Den markerar också de initiala klustercentrumen (röda stjärnor) som genereras för K-betyder kluster.

Definiera euklidiskt avstånd

Python3




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

>

>

Skapa funktionen för att tilldela och uppdatera klustercentret

E-steget tilldelar datapunkter till närmaste klustercentrum, och M-steget uppdaterar klustercenter baserat på medelvärdet av tilldelade punkter i K-means-kluster.

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>

>

>

Steg 7: Skapa funktionen för att förutsäga klustret för datapunkterna

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>

>

>

Tilldela, uppdatera och förutsäg klustercentret

Python3




clusters>=> assign_clusters(X,clusters)> clusters>=> update_clusters(X,clusters)> pred>=> pred_cluster(X,clusters)>

>

>

Rita datapunkterna med deras förutsagda klustercentrum

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()>

java escape-tecken

>

>

Produktion :

K-means Clustering - Geeksforgeeks

K-betyder Clustering

Plottet visar datapunkter färgade av deras förutsagda kluster. De röda markörerna representerar de uppdaterade klustercentrumen efter E-M-stegen i K-means-klusteralgoritmen.

Exempel 2

Importera nödvändiga bibliotek

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>

>

>

Ladda datamängden

Python3




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

css fet text

>

>

Armbågsmetod

Att hitta det ideala antalet grupper att dela upp data i är ett grundläggande steg i alla oövervakade algoritmer. En av de vanligaste teknikerna för att räkna ut detta idealiska värde på k är armbågsmetoden.

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_)>

>

>

Rita armbågsgrafen för att hitta det optimala antalet kluster

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()>

>

>

Produktion:

Armbågsmetod

Från ovanstående graf kan vi observera att vid k=2 och k=3 armbågsliknande situation. Så vi överväger K=3

Bygg Kmeans-klustringsmodellen

Python3




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

>

>

Produktion:

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

Hitta klustrets centrum

Python3

vad är objekt java




kmeans.cluster_centers_>

>

>

Produktion:

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]])>

Förutsäg klustergruppen:

Python3




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

>

>

Produktion:

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

Rita upp klustrets centrum 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()>

>

>

Produktion:

K-betyder klustring - Geeksforgeeks

K- betyder klustring

Underdiagrammet till vänster visar kronbladslängden mot kronbladets bredd med datapunkter färgade av kluster och röda markörer indikerar K-medel klustercentrum. Underdiagrammet till höger visar foderbladslängd mot foderbladsbredd på liknande sätt.

Slutsats

Sammanfattningsvis är K-means-klustring en kraftfull oövervakad maskininlärningsalgoritm för att gruppera omärkta datamängder. Dess mål är att dela upp data i kluster, vilket gör liknande datapunkter till en del av samma grupp. Algoritmen initierar klustercentroider och tilldelar iterativt datapunkter till närmaste tyngdpunkt, och uppdaterar centroider baserat på medelvärdet av punkter i varje kluster.

Vanliga frågor (FAQs)

1. Vad är k-means klustring för dataanalys?

K-means är en partitioneringsmetod som delar upp en datauppsättning i 'k' distinkta, icke-överlappande delmängder (kluster) baserat på likhet, som syftar till att minimera variansen inom varje kluster.

2.Vad är ett exempel på k-medel i verkligheten?

Kundsegmentering inom marknadsföring, där k-means grupperar kunder baserat på köpbeteende, vilket gör att företag kan skräddarsy marknadsföringsstrategier för olika segment.

3. Vilken typ av data är k-means klustringsmodell?

K-means fungerar bra med numeriska data, där begreppet avstånd mellan datapunkter är meningsfullt. Det tillämpas vanligtvis på kontinuerliga variabler.

4.Används K-medel för förutsägelse?

K-means används främst för att gruppera och gruppera liknande datapunkter. Den förutsäger inte etiketter för nya data; den tilldelar dem till befintliga kluster baserat på likhet.

5.Vad är syftet med k-betyder klustring?

Målet är att dela upp data i 'k'-kluster, vilket minimerar variansen inom kluster. Den försöker bilda grupper där datapunkter inom varje kluster är mer lika varandra än de i andra kluster.