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?
- Hvad er formålet med k-betyder klyngedannelse?
- Hvordan fungerer k-betyder klyngedannelse?
- Implementering af K-Means Clustering i Python
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:
- Først initialiserer vi tilfældigt k punkter, kaldet middel eller klynge centroider.
- 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.
- 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
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
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
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 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.