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