logo

K betyder Clustering – Introduktion

K-Betyder Clustering er en Uovervåget maskinlæring algoritme, som grupperer det umærkede datasæt i forskellige klynger. Artiklen har til formål at udforske grundprincipperne og virkemåden af ​​k mean clustering sammen med implementeringen.

Indholdsfortegnelse

Hvad er K-betyder Clustering?

Uovervåget maskinlæring er processen med at lære en computer at bruge umærkede, uklassificerede data og gøre det muligt for algoritmen at operere på disse data uden overvågning. Uden forudgående datatræning er maskinens opgave i dette tilfælde at organisere usorterede data i overensstemmelse med paralleller, mønstre og variationer.



K betyder clustering, tildeler datapunkter til en af ​​K-klyngerne afhængigt af deres afstand fra midten af ​​klyngerne. Det starter med tilfældigt at tildele klyngernes tyngdepunkt i rummet. Derefter tildeles hvert datapunkt til en af ​​klyngen baseret på dets afstand fra klyngens tyngdepunkt. Efter tildeling af hvert punkt til en af ​​klyngen, tildeles nye klynge centroider. Denne proces kører iterativt, indtil den finder en god klynge. I analysen antager vi, at antallet af klynge er angivet i avanceret, og vi skal sætte point i en af ​​gruppen.

I nogle tilfælde er K ikke klart defineret, og vi er nødt til at tænke på det optimale antal K. K Betyder, at klyngning udfører bedst data er godt adskilt. Når datapunkter overlappede, er denne klyngning ikke egnet. K Means er hurtigere sammenlignet med andre klyngeteknikker. Det giver en stærk kobling mellem datapunkterne. K Betyder klynge giver ikke klare oplysninger om kvaliteten af ​​klynger. Forskellig indledende tildeling af klyngecentroid kan føre til forskellige klynger. Også K Means-algoritmen er følsom over for støj. Det kan have holdt sig i lokale minima.

Hvad er formålet med k-betyder klyngedannelse?

Målet med klyngedannelse er at dele befolkningen eller sæt af datapunkter i et antal grupper, således at datapunkterne inden for hver gruppe er flere sammenlignelig til hinanden og forskellige fra datapunkterne i de andre grupper. Det er grundlæggende en gruppering af ting baseret på, hvor ens og forskellige de er til hinanden.

Hvordan fungerer k-betyder klyngedannelse?

Vi får et datasæt af elementer med visse funktioner og værdier for disse funktioner (som en vektor). Opgaven er at kategorisere disse elementer i grupper. For at opnå dette vil vi bruge K-means-algoritmen, en uovervåget indlæringsalgoritme. 'K' i navnet på algoritmen repræsenterer antallet af grupper/klynger, vi ønsker at klassificere vores elementer i.

(Det vil hjælpe, hvis du tænker på elementer som punkter i et n-dimensionelt rum). Algoritmen vil kategorisere emnerne i k grupper eller klynger af lighed. For at beregne den lighed vil vi bruge den euklidiske afstand som en måling.

Algoritmen fungerer som følger:

  1. Først initialiserer vi tilfældigt k punkter, kaldet middel eller klynge centroider.
  2. Vi kategoriserer hvert element til dets nærmeste middelværdi, og vi opdaterer middelværdiens koordinater, som er gennemsnittet af de elementer, der er kategoriseret i denne klynge indtil videre.
  3. Vi gentager processen for et givet antal iterationer, og til sidst har vi vores klynger.

Punkterne nævnt ovenfor kaldes middel, fordi de er middelværdierne for de punkter, der er kategoriseret i dem. For at initialisere disse midler har vi en masse muligheder. En intuitiv metode er at initialisere midlerne ved tilfældige elementer i datasættet. En anden metode er at initialisere midlerne ved tilfældige værdier mellem grænserne for datasættet (hvis for en funktion x, elementerne har værdier i [0,3], vil vi initialisere middel med værdier for x ved [0,3]).

Ovenstående algoritme i pseudokode er som følger:

Initialize k means with random values -->For et givet antal iterationer: --> Iterér gennem emner: --> Find middelværdien tættest på emnet ved at beregne emnets euklidiske afstand med hver af midlerne --> Tildel element til middelværdi --> Opdater middelværdi vha. flytte det til gennemsnittet af elementerne i den klynge>

Implementering af K-Means Clustering i Python

Eksempel 1

Importer de nødvendige biblioteker

Vi importerer Numpy til statistiske beregninger, Matplotlib at plotte kurve, og make_blobs fra sklearn.datasets.

Python3


java mens tilstand



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

>

>

Opret det brugerdefinerede datasæt med make_blobs og plot 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()>

>

>

Produktion :

Klyngedatasæt - Geeksforgeeks

Klyngedatasæt

Initialiser de tilfældige centroider

Koden initialiserer tre klynger til K-betyder clustering. Den sætter et tilfældigt frø og genererer tilfældige klyngecentre inden for et specificeret område og opretter en tom liste point 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>

>

>

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': []}}>

Plot det tilfældige initialiseringscenter 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()>

>

>

Produktion :

Datapunkter med tilfældigt center - Geeksforgeeks

Datapunkter med tilfældigt center

Plottet viser et spredningsplot af datapunkter (X[:,0], X[:,1]) med gitterlinjer. Det markerer også de indledende klyngecentre (røde stjerner) genereret for K-betyder klyngedannelse.

Definer euklidisk afstand

Python3




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

>

>

Opret funktionen til at tildele og opdatere klyngecenteret

E-trinnet tildeler datapunkter til det nærmeste klyngecenter, og M-trinnet opdaterer klyngecentre baseret på gennemsnittet af tildelte punkter i K-betyder klyngedannelse.

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>

gratis ipconfig
>

>

Trin 7: Opret funktionen til at forudsige klyngen for datapunkterne

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, opdater og forudsig klyngecentret

Python3




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

>

>

Plot datapunkterne med deres forudsagte klyngecenter

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

>

>

Produktion :

K-betyder Clustering - Geeksforgeeks

K-betyder Clustering

Plottet viser datapunkter farvet af deres forudsagte klynger. De røde markører repræsenterer de opdaterede klyngecentre efter E-M-trinene i K-betyder klyngealgoritmen.

Eksempel 2

Importer de nødvendige biblioteker

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>

>

>

Indlæs datasættet

Python3




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

topologier

>

>

Albue metode

At finde det ideelle antal grupper at opdele dataene i er et grundlæggende trin i enhver uovervåget algoritme. En af de mest almindelige teknikker til at finde ud af denne ideelle værdi af k er albuetilgangen.

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

>

>

Plot albuegrafen for at finde det optimale antal 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()>

>

>

Produktion:

Albue metode

Fra ovenstående graf kan vi observere, at ved k=2 og k=3 albuelignende situation. Så vi overvejer K=3

Byg Kmeans klyngemodellen

Python3




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

>

>

Produktion:

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

Find klyngecentret

Python3

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

Forudsig klyngegruppen:

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

Plot klyngecentret 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 clustering - Geeksforgeeks

K-betyder klyngedannelse

Underplotten til venstre viser kronbladslængde vs. kronbladsbredde med datapunkter farvet af klynger, og røde markører angiver K-betyder klyngecentre. Underplottet til højre viser bægerbladslængde vs. bægerbladsbredde på samme måde.

Konklusion

Som konklusion er K-means clustering en kraftfuld uovervåget maskinlæringsalgoritme til gruppering af umærkede datasæt. Dens formål er at opdele data i klynger, hvilket gør lignende datapunkter til en del af den samme gruppe. Algoritmen initialiserer klynge centroider og tildeler iterativt datapunkter til nærmeste tyngdepunkt, og opdaterer centroider baseret på middelværdien af ​​punkter i hver klynge.

Ofte stillede spørgsmål (FAQ)

1. Hvad er k-betyder clustering til dataanalyse?

K-means er en partitioneringsmetode, der opdeler et datasæt i 'k' distinkte, ikke-overlappende undersæt (klynger) baseret på lighed, med det formål at minimere variansen inden for hver klynge.

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

Kundesegmentering i marketing, hvor k-betyder grupperer kunder baseret på købsadfærd, hvilket giver virksomheder mulighed for at skræddersy marketingstrategier til forskellige segmenter.

3. Hvilken type data er k-means clustering model?

K-means fungerer godt med numeriske data, hvor begrebet afstand mellem datapunkter er meningsfuldt. Det anvendes almindeligvis på kontinuerte variabler.

4.Bruges K-midler til forudsigelse?

K-means bruges primært til at klynge og gruppere lignende datapunkter. Den forudsiger ikke etiketter for nye data; den tildeler dem til eksisterende klynger baseret på lighed.

5.Hvad er formålet med k-betyder klyngedannelse?

Målet er at opdele data i 'k'-klynger, hvilket minimerer intra-klynge-variansen. Det søger at danne grupper, hvor datapunkter inden for hver klynge minder mere om hinanden end dem i andre klynger.