logo

K significa Clustering - Introducció

K-Means Clustering és un Aprenentatge automàtic no supervisat algorisme, que agrupa el conjunt de dades sense etiquetar en diferents clústers. L'article pretén explorar els fonaments i el funcionament de l'agrupació k mean juntament amb la implementació.

Taula de contingut

Què és K-means Clustering?

Aprenentatge automàtic no supervisat és el procés d'ensenyar a un ordinador a utilitzar dades sense etiquetar i no classificar i permetre que l'algorisme funcioni amb aquestes dades sense supervisió. Sense cap formació prèvia sobre dades, la feina de la màquina en aquest cas és organitzar les dades no ordenades segons paral·lels, patrons i variacions.



K significa agrupació, assigna punts de dades a un dels clústers K en funció de la seva distància des del centre dels clústers. Comença assignant aleatòriament el centroide dels clústers a l'espai. A continuació, cada punt de dades s'assigna a un del clúster en funció de la seva distància des del centreide del clúster. Després d'assignar cada punt a un dels clústers, s'assignen nous centroides de clúster. Aquest procés s'executa de manera iterativa fins que troba un bon clúster. En l'anàlisi suposem que el nombre de clúster es dóna de manera avançada i hem de posar punts en un del grup.

En alguns casos, K no està clarament definit, i hem de pensar en el nombre òptim de K. K vol dir que la agrupació en clúster fa que les dades estiguin ben separades. Quan els punts de dades es superposen, aquesta agrupació no és adequada. K Means és més ràpid en comparació amb altres tècniques de agrupació. Proporciona un fort acoblament entre els punts de dades. K significa que els clústers no proporcionen informació clara sobre la qualitat dels clústers. Una assignació inicial diferent del centroide del clúster pot donar lloc a diferents clústers. A més, l'algoritme K Means és sensible al soroll. Potser s'hagi enganxat als mínims locals.

Quin és l'objectiu de la agrupació de k-means?

L'objectiu de agrupació és dividir la població o conjunt de punts de dades en diversos grups de manera que els punts de dades dins de cada grup siguin més comparable entre si i diferents dels punts de dades dels altres grups. Es tracta bàsicament d'un agrupament de coses basat en com són semblants i diferents entre si.

Com funciona la agrupació de k-means?

Ens donen un conjunt de dades d'elements, amb determinades característiques i valors per a aquestes característiques (com un vector). La tasca és classificar aquests elements en grups. Per aconseguir-ho, utilitzarem l'algoritme K-means, un algorisme d'aprenentatge no supervisat. 'K' al nom de l'algorisme representa el nombre de grups/clústers en què volem classificar els nostres elements.

(Serà d'ajuda si penseu en els elements com a punts en un espai n-dimensional). L'algorisme classificarà els elements en k grups o clústers de semblança. Per calcular aquesta similitud, utilitzarem la distància euclidiana com a mesura.

L'algorisme funciona de la següent manera:

  1. Primer, inicialitzem aleatòriament k punts, anomenats mitjans o centroides de clúster.
  2. Categoritzem cada element a la seva mitjana més propera i actualitzem les coordenades de la mitjana, que són les mitjanes dels elements categoritzats en aquest clúster fins ara.
  3. Repetim el procés per a un nombre determinat d'iteracions i, al final, tenim els nostres clústers.

Els punts esmentats anteriorment s'anomenen mitjans perquè són els valors mitjans dels elements categoritzats en ells. Per inicialitzar aquests mitjans, tenim moltes opcions. Un mètode intuïtiu és inicialitzar els mitjans en elements aleatoris del conjunt de dades. Un altre mètode és inicialitzar els mitjans en valors aleatoris entre els límits del conjunt de dades (si es tracta d'una característica x, els ítems tenen valors a [0,3], inicialitzarem les mitjanes amb valors per x a [0,3]).

L'algorisme anterior en pseudocodi és el següent:

Initialize k means with random values -->Per a un nombre determinat d'iteracions: --> Itera entre els elements: --> Trobeu la mitjana més propera a l'element calculant la distància euclidiana de l'element amb cadascun dels mitjans --> Assigna l'element a la mitjana --> Actualitza la mitjana per canviant-lo a la mitjana dels elements d'aquest clúster>

Implementació de K-Means Clustering en Python

Exemple 1

Importa les biblioteques necessàries

Estem important Numpy per a càlculs estadístics, Matplotlib traçar el gràfic, i make_blobs de sklearn.datasets.

Python 3


millorat per al bucle java



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

>

>

Creeu el conjunt de dades personalitzat amb make_blobs i traceu-lo

Python 3




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

>

>

Sortida :

Conjunt de dades de clúster - Geeksforgeeks

Conjunt de dades en clúster

Inicialitzar els centroides aleatoris

El codi inicialitza tres clústers per a l'agrupament de K-means. Estableix una llavor aleatòria i genera centres de clúster aleatoris dins d'un interval especificat, i crea un espai buit llista de punts per a cada clúster.

Python 3




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>

>

>

Sortida:

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

Traceu el centre d'inicialització aleatòria amb punts de dades

Python 3




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

>

>

Sortida :

Punts de dades amb centre aleatori - Geeksforgeeks

Punts de dades amb centre aleatori

El gràfic mostra un gràfic de dispersió de punts de dades (X[:,0], X[:,1]) amb línies de quadrícula. També marca els centres de clúster inicials (estrelles vermelles) generats per a l'agrupament K-means.

Definiu la distància euclidiana

Python 3




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

python __dict__
>

>

Creeu la funció per assignar i actualitzar el centre de clúster

L'E-step assigna punts de dades al centre de clúster més proper i l'M-step actualitza els centres de clúster en funció de la mitjana dels punts assignats a l'agrupació de K-means.

Python 3




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

>

>

Pas 7: creeu la funció per predir el clúster per als punts de dades

Python 3




python converteix bytes en cadena

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>

>

>

Assigneu, actualitzeu i prediu el centre del clúster

Python 3




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

>

>

Traceu els punts de dades amb el seu centre de clúster previst

Python 3




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

>

>

Sortida :

K-means Clustering - Geeksforgeeks

K significa agrupació

La trama mostra els punts de dades acolorits pels seus cúmuls predits. Els marcadors vermells representen els centres de clúster actualitzats després dels passos E-M de l'algorisme de agrupació K-means.

Exemple 2

Importa les biblioteques necessàries

Python 3




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>

>

>

Carregueu el conjunt de dades

Python 3




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

forma completa de i d e

>

>

Mètode del colze

Trobar el nombre ideal de grups per dividir les dades és una etapa bàsica en qualsevol algorisme no supervisat. Una de les tècniques més comunes per esbrinar aquest valor ideal de k és l'enfocament del colze.

Python 3




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

>

>

Traceu el gràfic de colze per trobar el nombre òptim de clúster

Python 3




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

>

>

Sortida:

Mètode del colze

A partir del gràfic anterior, podem observar que a k=2 i k=3 situació semblant a un colze. Per tant, estem considerant K=3

Construeix el model de agrupació Kmeans

Python 3




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

>

>

Sortida:

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

Trobeu el centre del clúster

Python 3

què és agrupar




kmeans.cluster_centers_>

>

>

Sortida:

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

Prediu el grup de clúster:

Python 3




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

>

>

Sortida:

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

Traceu el centre del clúster amb punts de dades

Python 3




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

>

>

Sortida:

K-means agrupació - Geeksforgeeks

K-significa agrupació

La subtrama de l'esquerra mostra la longitud dels pètals en funció de l'amplada dels pètals amb els punts de dades acolorits per grups, i els marcadors vermells indiquen els centres de clúster K-means. La subtrama de la dreta mostra la longitud del sèpal en comparació amb l'amplada del sèpal de manera similar.

Conclusió

En conclusió, el clustering K-means és un potent algorisme d'aprenentatge automàtic no supervisat per agrupar conjunts de dades sense etiquetar. El seu objectiu és dividir les dades en clústers, fent que punts de dades similars formen part d'un mateix grup. L'algoritme inicialitza els centroides del clúster i assigna iterativament punts de dades al centroide més proper, actualitzant els centroides en funció de la mitjana dels punts de cada clúster.

Preguntes freqüents (FAQ)

1. Què és l'agrupació de k-means per a l'anàlisi de dades?

K-means és un mètode de partició que divideix un conjunt de dades en 'k' subconjunts (clústers) diferents i no superposats basats en la similitud, amb l'objectiu de minimitzar la variància dins de cada clúster.

2.Què és un exemple de k-means a la vida real?

Segmentació de clients en màrqueting, on k-means agrupa els clients en funció del comportament de compra, permetent a les empreses adaptar estratègies de màrqueting per a diferents segments.

3. Quin tipus de dades és el model de agrupació k-means?

K-means funciona bé amb dades numèriques, on el concepte de distància entre punts de dades és significatiu. S'aplica habitualment a variables contínues.

4.S'utilitzen K-means per a la predicció?

Els K-means s'utilitzen principalment per agrupar i agrupar punts de dades similars. No prediu etiquetes per a dades noves; els assigna als clústers existents en funció de la similitud.

5.Quin és l'objectiu de la agrupació de k-means?

L'objectiu és dividir les dades en 'k' clústers, minimitzant la variància intra-clúster. Pretén formar grups on els punts de dades de cada clúster siguin més semblants entre si que als d'altres clústers.