logo

Algoritme de agrupació de K-Means

K-Means Clustering és un algorisme d'aprenentatge no supervisat que s'utilitza per resoldre els problemes de clustering en l'aprenentatge automàtic o la ciència de dades. En aquest tema, aprendrem què és l'algoritme de agrupació K-means, com funciona l'algoritme, juntament amb la implementació de Python de l'agrupació de k-means.

Què és l'algoritme K-Means?

K-Means Clustering és un Algorisme d'aprenentatge no supervisat , que agrupa el conjunt de dades sense etiqueta en diferents clústers. Aquí K defineix el nombre de clústers predefinits que s'han de crear en el procés, com si K=2, hi haurà dos clústers, i per a K=3, hi haurà tres clústers, i així successivament.

És un algorisme iteratiu que divideix el conjunt de dades sense etiquetar en k grups diferents de tal manera que cada conjunt de dades pertany només a un grup que té propietats similars.

Ens permet agrupar les dades en diferents grups i una manera còmoda de descobrir les categories de grups del conjunt de dades sense etiquetar per si sol sense necessitat de cap formació.

És un algorisme basat en el centroide, on cada clúster està associat amb un centroide. L'objectiu principal d'aquest algorisme és minimitzar la suma de distàncies entre el punt de dades i els seus corresponents clústers.

L'algorisme pren el conjunt de dades sense etiqueta com a entrada, divideix el conjunt de dades en k-nombre de clústers i repeteix el procés fins que no troba els millors clústers. El valor de k s'ha de predeterminar en aquest algorisme.

El k-significa agrupació L'algorisme realitza principalment dues tasques:

  • Determina el millor valor per a K punts centrals o centroides mitjançant un procés iteratiu.
  • Assigna cada punt de dades al seu centre k més proper. Aquells punts de dades que estan a prop del centre k particular, creen un clúster.

Per tant, cada clúster té punts de dades amb alguns punts en comú i està lluny d'altres clústers.

El diagrama següent explica el funcionament de l'algoritme de agrupació K-means:

Algoritme de agrupació de K-Means

Com funciona l'algoritme K-Means?

El funcionament de l'algorisme K-Means s'explica als passos següents:

Pas 1: Seleccioneu el número K per decidir el nombre de clústers.

Pas-2: Seleccioneu K punts o centroides aleatoris. (Pot ser un altre del conjunt de dades d'entrada).

Pas-3: Assigna cada punt de dades al seu centroide més proper, que formarà els grups K predefinits.

Pas-4: Calculeu la variància i col·loqueu un nou centroide de cada clúster.

Pas-5: Repetiu els tercers passos, el que significa reassignar cada punt de dades al nou centroide més proper de cada clúster.

Pas-6: Si es produeix alguna reassignació, aneu al pas 4, sinó aneu a FINALITZAR.

Pas-7 : El model està llest.

conjunt mecanografiat

Entenem els passos anteriors tenint en compte les trames visuals:

Suposem que tenim dues variables M1 i M2. El diagrama de dispersió de l'eix x-y d'aquestes dues variables es mostra a continuació:

Algoritme de agrupació de K-Means
  • Prenem el nombre k de clústers, és a dir, K=2, per identificar el conjunt de dades i posar-los en diferents clústers. Vol dir que aquí intentarem agrupar aquests conjunts de dades en dos grups diferents.
  • Hem de triar uns k punts aleatoris o un baricentre per formar el clúster. Aquests punts poden ser els punts del conjunt de dades o qualsevol altre punt. Per tant, aquí estem seleccionant els dos punts següents com a k punts, que no formen part del nostre conjunt de dades. Considereu la imatge següent:
    Algoritme de agrupació de K-Means
  • Ara assignarem cada punt de dades del diagrama de dispersió al seu punt K o centroide més proper. Ho calcularem aplicant algunes matemàtiques que hem estudiat per calcular la distància entre dos punts. Per tant, dibuixarem una mediana entre els dos centroides. Considereu la imatge següent:
    Algoritme de agrupació de K-Means

A la imatge de dalt, queda clar que els punts del costat esquerre de la línia estan a prop del K1 o del centroide blau, i els punts de la dreta de la línia estan a prop del centroide groc. Pintem-los de blau i groc per a una visualització clara.

Algoritme de agrupació de K-Means
  • Com que hem de trobar el clúster més proper, repetirem el procés escollint un nou centroide . Per triar els nous centroides, calcularem el centre de gravetat d'aquests centroides i trobarem nous centroides com a continuació:
    Algoritme de agrupació de K-Means
  • A continuació, reassignarem cada punt de dades al nou centroide. Per a això, repetirem el mateix procés de trobar una línia mitjana. La mediana serà com la següent imatge:
    Algoritme de agrupació de K-Means

A la imatge de dalt, podem veure, un punt groc es troba al costat esquerre de la línia i dos punts blaus es troben a la dreta de la línia. Així, aquests tres punts s'assignaran a nous centroides.

Algoritme de agrupació de K-Means

Com que s'ha produït la reassignació, tornarem al pas 4, que és trobar nous centroides o punts K.

  • Repetirem el procés trobant el centre de gravetat dels centroides, de manera que els nous centroides seran com es mostra a la imatge següent:
    Algoritme de agrupació de K-Means
  • A mesura que aconseguim els nous centroides, tornarem a dibuixar la línia mitjana i reassignar els punts de dades. Així doncs, la imatge serà:
    Algoritme de agrupació de K-Means
  • Podem veure a la imatge de dalt; no hi ha punts de dades diferents a cap dels costats de la línia, el que significa que el nostre model està format. Considereu la imatge següent:
    Algoritme de agrupació de K-Means

Com que el nostre model està llest, ara podem eliminar els centroides suposats, i els dos cúmuls finals seran com es mostra a la imatge següent:

Algoritme de agrupació de K-Means

Com triar el valor del 'nombre K de clústers' a K-means Clustering?

El rendiment de l'algoritme d'agrupació K-means depèn dels clústers altament eficients que forma. Però triar el nombre òptim de clústers és una gran tasca. Hi ha algunes maneres diferents de trobar el nombre òptim de clústers, però aquí estem discutint el mètode més adequat per trobar el nombre de clústers o el valor de K. El mètode es mostra a continuació:

Mètode del colze

El mètode Elbow és una de les maneres més populars de trobar el nombre òptim de clústers. Aquest mètode utilitza el concepte de valor WCSS. WCSS significa Dins del grup Suma de quadrats , que defineix les variacions totals dins d'un clúster. La fórmula per calcular el valor de WCSS (per a 3 clústers) es dóna a continuació:

WCSS= ∑Pi al Clúster 1distància (pàgiC1)2+∑Pi al Clúster 2distància (pàgiC2)2+∑Pi al Clúster3distància (pàgiC3)2

En la fórmula anterior de WCSS,

Pi al Clúster 1distància (pàgiC1)2: És la suma del quadrat de les distàncies entre cada punt de dades i el seu centroide dins d'un clúster1 i el mateix per als altres dos termes.

Per mesurar la distància entre els punts de dades i el centroide, podem utilitzar qualsevol mètode com la distància euclidiana o la distància de Manhattan.

Per trobar el valor òptim dels clústers, el mètode del colze segueix els passos següents:

  • Executa l'agrupament de K-means en un conjunt de dades determinat per a diferents valors K (intervals d'1 a 10).
  • Per a cada valor de K, calcula el valor WCSS.
  • Traça una corba entre els valors de WCSS calculats i el nombre de clústers K.
  • El punt agut de corba o un punt de la trama sembla un braç, llavors aquest punt es considera el millor valor de K.

Com que el gràfic mostra la corba pronunciada, que sembla un colze, per tant es coneix com el mètode del colze. El gràfic del mètode del colze és com la imatge següent:

Algoritme de agrupació de K-Means

Nota: podem triar el nombre de clústers igual als punts de dades donats. Si triem el nombre de clústers igual als punts de dades, aleshores el valor de WCSS esdevé zero, i aquest serà el punt final de la trama.

Implementació de Python de l'algoritme de agrupació de K-means

A la secció anterior, hem parlat de l'algorisme K-means, ara veiem com es pot implementar mitjançant Python .

Abans de la implementació, entenem quin tipus de problema resoldrem aquí. Per tant, tenim un conjunt de dades Centre comercial_Clients , que són les dades dels clients que visiten el centre comercial i hi passen.

En el conjunt de dades donat, tenim Client_Id, gènere, edat, ingressos anuals ($) i puntuació de despesa (que és el valor calculat de quant ha gastat un client al centre comercial, com més valor, més ha gastat). A partir d'aquest conjunt de dades, hem de calcular alguns patrons, ja que és un mètode no supervisat, de manera que no sabem què calcular exactament.

Els passos a seguir per a la implementació es detallen a continuació:

    Preprocessament de dades Trobar el nombre òptim de clústers mitjançant el mètode del colze Entrenament de l'algorisme K-means al conjunt de dades d'entrenament Visualització dels clústers

Pas 1: Pas de preprocessament de dades

El primer pas serà el preprocessament de les dades, com vam fer als nostres temes anteriors de Regressió i classificació. Però pel que fa al problema de la agrupació, serà diferent d'altres models. Parlem-ho:

    Importació de biblioteques
    Com hem fet en temes anteriors, en primer lloc, importarem les biblioteques del nostre model, que forma part del preprocessament de dades. El codi es mostra a continuació:
 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

En el codi anterior, el numpy hem importat per realitzar càlculs matemàtics, matplotlib és per traçar el gràfic, i pandes són per gestionar el conjunt de dades.

    Importació del conjunt de dades:
    A continuació, importarem el conjunt de dades que necessitem utilitzar. Per tant, aquí estem utilitzant el conjunt de dades Mall_Customer_data.csv. Es pot importar mitjançant el codi següent:
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

En executar les línies de codi anteriors, obtindrem el nostre conjunt de dades a l'IDE de Spyder. El conjunt de dades s'assembla a la imatge següent:

Algoritme de agrupació de K-Means

A partir del conjunt de dades anterior, hem de trobar-hi alguns patrons.

classe abstracta java
    Extracció de variables independents

Aquí no necessitem cap variable dependent per al pas de preprocessament de dades, ja que és un problema de clúster i no tenim ni idea de què determinarem. Per tant, només afegirem una línia de codi per a la matriu de característiques.

 x = dataset.iloc[:, [3, 4]].values 

Com podem veure, n'estem extreure només 3rdi 4thcaracterística. És perquè necessitem una trama 2D per visualitzar el model i algunes funcions no són necessàries, com ara customer_id.

Pas 2: Trobar el nombre òptim de clústers mitjançant el mètode del colze

En el segon pas, intentarem trobar el nombre òptim de clústers per al nostre problema de clúster. Així, com s'ha comentat anteriorment, aquí utilitzarem el mètode del colze per a aquest propòsit.

Com sabem, el mètode del colze utilitza el concepte WCSS per dibuixar la trama traçant valors WCSS a l'eix Y i el nombre de clústers a l'eix X. Per tant, calcularem el valor de WCSS per a diferents k valors que van de l'1 al 10. A continuació es mostra el codi:

 #finding optimal number of clusters using the elbow method from sklearn.cluster import KMeans wcss_list= [] #Initializing the list for the values of WCSS #Using for loop for iterations from 1 to 10. for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42) kmeans.fit(x) wcss_list.append(kmeans.inertia_) mtp.plot(range(1, 11), wcss_list) mtp.title('The Elobw Method Graph') mtp.xlabel('Number of clusters(k)') mtp.ylabel('wcss_list') mtp.show() 

Com podem veure al codi anterior, hem utilitzat els KMeans classe de sklearn. biblioteca de clústers per formar els clústers.

A continuació, hem creat el llista_wcss variable per inicialitzar una llista buida, que s'utilitza per contenir el valor de wcss calculat per a diferents valors de k que van d'1 a 10.

Després d'això, hem inicialitzat el bucle for per a la iteració en un valor diferent de k que va d'1 a 10; ja que for loop a Python, exclou el límit de sortida, de manera que es pren com a 11 per incloure 10thvalor.

La resta del codi és similar a la que vam fer en temes anteriors, ja que hem ajustat el model a una matriu de característiques i després hem dibuixat el gràfic entre el nombre de clústers i WCSS.

Sortida: Després d'executar el codi anterior, obtindrem la següent sortida:

Algoritme de agrupació de K-Means

Des de la trama anterior, podem veure que el punt del colze es troba 5. Per tant, el nombre de clústers aquí serà 5.

Algoritme de agrupació de K-Means

Pas 3: Entrenar l'algorisme K-means al conjunt de dades d'entrenament

Com que tenim el nombre de clústers, ara podem entrenar el model al conjunt de dades.

Per entrenar el model, utilitzarem les mateixes dues línies de codi que hem utilitzat a la secció anterior, però aquí en comptes d'utilitzar i, utilitzarem 5, ja que sabem que hi ha 5 clústers que s'han de formar. El codi es mostra a continuació:

 #training the K-means model on a dataset kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42) y_predict= kmeans.fit_predict(x) 

La primera línia és la mateixa que l'anterior per crear l'objecte de la classe KMeans.

A la segona línia de codi, hem creat la variable dependent i_predict per entrenar el model.

En executar les línies de codi anteriors, obtindrem la variable y_predict. Ho podem comprovar a continuació l'explorador de variables opció a l'IDE de Spyder. Ara podem comparar els valors de y_predict amb el nostre conjunt de dades original. Considereu la imatge següent:

Algoritme de agrupació de K-Means

A partir de la imatge anterior, ara podem relacionar que el CustomerID 1 pertany a un clúster

3 (ja que l'índex comença des de 0, per tant, 2 es considerarà 3), i 2 pertany al clúster 4, i així successivament.

Pas 4: visualització dels clústers

L'últim pas és visualitzar els clústers. Com que tenim 5 clústers per al nostre model, visualitzarem cada clúster un per un.

Per visualitzar els clústers utilitzarem el diagrama de dispersió mitjançant la funció mtp.scatter() de matplotlib.

 #visulaizing the clusters mtp.scatter(x[y_predict == 0, 0], x[y_predict == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') #for first cluster mtp.scatter(x[y_predict == 1, 0], x[y_predict == 1, 1], s = 100, c = 'green', label = 'Cluster 2') #for second cluster mtp.scatter(x[y_predict== 2, 0], x[y_predict == 2, 1], s = 100, c = 'red', label = 'Cluster 3') #for third cluster mtp.scatter(x[y_predict == 3, 0], x[y_predict == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') #for fourth cluster mtp.scatter(x[y_predict == 4, 0], x[y_predict == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') #for fifth cluster mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroid') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show() 

A les línies de codi anteriors, hem escrit codi per a cada clúster, que va de l'1 al 5. La primera coordenada del mtp.scatter, és a dir, x[y_predict == 0, 0] que conté el valor x per mostrar la matriu de característiques, i el y_predict oscil·la entre 0 i 1.

Sortida:

Algoritme de agrupació de K-Means

La imatge de sortida mostra clarament els cinc grups diferents amb colors diferents. Els clústers es formen entre dos paràmetres del conjunt de dades; Ingressos anuals del client i despesa. Podem canviar els colors i les etiquetes segons el requisit o l'elecció. També podem observar alguns punts dels patrons anteriors, que es donen a continuació:

    Clúster 1mostra els clients amb el salari mitjà i la despesa mitjana perquè puguem categoritzar aquests clients com a
  • Cluster2 mostra que el client té uns ingressos elevats però una despesa baixa, de manera que els podem classificar com a amb compte .
  • El Clúster3 mostra els ingressos baixos i també la despesa baixa perquè es puguin classificar com a sensibles.
  • Cluster4 mostra els clients amb ingressos baixos amb despesa molt alta perquè es puguin classificar com descurat .
  • Cluster5 mostra els clients amb ingressos elevats i despesa elevada perquè es puguin classificar com a objectiu, i aquests clients poden ser els clients més rendibles per al propietari del centre comercial.