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?
- Vad är syftet med k-betyder klustring?
- Hur fungerar k-betyder klustring?
- Implementering av K-Means Clustering i Python
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:
- Först initialiserar vi slumpmässigt k punkter, kallade medel eller klustercentroider.
- 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.
- 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
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
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-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
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.