K-Means Clustering este un algoritm de învățare nesupravegheat care este utilizat pentru a rezolva problemele de clustering în învățarea automată sau în știința datelor. În acest subiect, vom afla ce este algoritmul de clustering K-means, cum funcționează algoritmul, împreună cu implementarea Python a grupării k-means.
Ce este algoritmul K-Means?
K-Means Clustering este un Algoritm de învățare nesupravegheată , care grupează setul de date neetichetat în grupuri diferite. Aici K definește numărul de clustere predefinite care trebuie create în proces, ca și cum K=2, vor fi două clustere, iar pentru K=3, vor fi trei clustere și așa mai departe.
Este un algoritm iterativ care împarte setul de date neetichetat în k clustere diferite, astfel încât fiecare set de date să aparțină unui singur grup care are proprietăți similare.
Ne permite să grupăm datele în diferite grupuri și o modalitate convenabilă de a descoperi singure categoriile de grupuri din setul de date neetichetat, fără a fi nevoie de vreo instruire.
Este un algoritm bazat pe centroid, în care fiecare cluster este asociat cu un centroid. Scopul principal al acestui algoritm este de a minimiza suma distanțelor dintre punctul de date și clusterele lor corespunzătoare.
Algoritmul ia ca intrare setul de date neetichetat, împarte setul de date în k-număr de clustere și repetă procesul până când nu găsește cele mai bune clustere. Valoarea lui k ar trebui să fie predeterminată în acest algoritm.
K-mijloacele gruparea algoritmul realizează în principal două sarcini:
descărcare sts
- Determină cea mai bună valoare pentru K puncte centrale sau centroizi printr-un proces iterativ.
- Atribuie fiecare punct de date celui mai apropiat centru k. Acele puncte de date care sunt aproape de centrul k specific creează un cluster.
Prin urmare, fiecare cluster are puncte de date cu unele aspecte comune și este departe de alte clustere.
Diagrama de mai jos explică funcționarea algoritmului de grupare K-means:
Cum funcționează algoritmul K-Means?
Funcționarea algoritmului K-Means este explicată în pașii de mai jos:
Pasul 1: Selectați numărul K pentru a decide numărul de clustere.
Pasul 2: Selectați aleatoriu K puncte sau centroizi. (Poate fi altul din setul de date de intrare).
Pasul 3: Atribuiți fiecare punct de date celui mai apropiat centroid, care va forma grupurile K predefinite.
Pasul-4: Calculați varianța și plasați un nou centroid al fiecărui grup.
Pasul-5: Repetați cei trei pași, ceea ce înseamnă realocați fiecare punct de date noului cel mai apropiat centroid al fiecărui cluster.
Pasul-6: Dacă are loc vreo reatribuire, atunci mergeți la pasul 4, altfel mergeți la TERMINARE.
Pasul-7 : Modelul este gata.
Să înțelegem pașii de mai sus luând în considerare diagramele vizuale:
Să presupunem că avem două variabile M1 și M2. Diagrama de dispersie pe axa x-y a acestor două variabile este prezentată mai jos:
- Să luăm numărul k de clustere, adică K=2, pentru a identifica setul de date și pentru a le pune în diferite clustere. Înseamnă că aici vom încerca să grupăm aceste seturi de date în două grupuri diferite.
- Trebuie să alegem câteva k puncte aleatoare sau un centroid pentru a forma clusterul. Aceste puncte pot fi fie punctele din setul de date, fie orice alt punct. Deci, aici selectăm cele două puncte de mai jos ca k puncte, care nu fac parte din setul nostru de date. Luați în considerare imaginea de mai jos:
- Acum vom atribui fiecare punct de date al diagramei de dispersie celui mai apropiat punct K sau centroid. O vom calcula prin aplicarea unor matematici pe care le-am studiat pentru a calcula distanța dintre două puncte. Deci, vom desena o mediană între ambii centroizi. Luați în considerare imaginea de mai jos:
Din imaginea de mai sus, este clar că punctele din partea stângă a liniei sunt aproape de centroidul K1 sau albastru, iar punctele din dreapta liniei sunt aproape de centroidul galben. Să le colorăm în albastru și galben pentru o vizualizare clară.
- Deoarece trebuie să găsim cel mai apropiat cluster, vom repeta procesul prin alegere un nou centroid . Pentru a alege noii centroizi, vom calcula centrul de greutate al acestor centroizi și vom găsi noi centroizi, după cum urmează:
- În continuare, vom reatribui fiecare punct de date noului centroid. Pentru aceasta, vom repeta același proces de găsire a unei linii mediane. Mediana va fi ca imaginea de mai jos:
Din imaginea de mai sus, putem vedea, un punct galben este pe partea stângă a liniei, iar două puncte albastre sunt chiar pe linie. Deci, aceste trei puncte vor fi alocate noilor centroizi.
Deoarece reatribuirea a avut loc, vom merge din nou la pasul 4, care este găsirea de noi centroizi sau K-puncte.
- Vom repeta procesul prin găsirea centrului de greutate al centroizilor, astfel încât noile centroizi vor fi așa cum se arată în imaginea de mai jos:
- Pe măsură ce am obținut noile centroide, vom desena din nou linia mediană și vom reatribui punctele de date. Deci, imaginea va fi:
- Putem vedea în imaginea de mai sus; nu există puncte de date diferite de fiecare parte a liniei, ceea ce înseamnă că modelul nostru este format. Luați în considerare imaginea de mai jos:
Deoarece modelul nostru este gata, acum putem elimina centroizii presupuși, iar cele două grupuri finale vor fi așa cum se arată în imaginea de mai jos:
Cum să alegeți valoarea „K număr de clustere” în K-means Clustering?
Performanța algoritmului de grupare K-means depinde de clusterele extrem de eficiente pe care le formează. Dar alegerea numărului optim de clustere este o sarcină mare. Există câteva moduri diferite de a găsi numărul optim de clustere, dar aici discutăm cea mai potrivită metodă pentru a găsi numărul de clustere sau valoarea lui K. Metoda este dată mai jos:
Metoda cotului
Metoda Elbow este una dintre cele mai populare moduri de a găsi numărul optim de clustere. Această metodă folosește conceptul de valoare WCSS. WCSS reprezintă În cadrul clusterului Suma pătratelor , care definește variațiile totale în cadrul unui cluster. Formula de calcul a valorii WCSS (pentru 3 clustere) este dată mai jos:
WCSS= ∑Peu în Cluster1distanta (piC1)2+∑Peu în Cluster2distanta (piC2)2+∑Pi în CLuster3distanta (piC3)2În formula de mai sus a WCSS,
∑Peu în Cluster1distanta (piC1)2: Este suma pătratului distanțelor dintre fiecare punct de date și centroidul său într-un cluster1 și aceeași pentru ceilalți doi termeni.
Pentru a măsura distanța dintre punctele de date și centroid, putem folosi orice metodă, cum ar fi distanța euclidiană sau distanța Manhattan.
Pentru a găsi valoarea optimă a clusterelor, metoda cotului urmează pașii de mai jos:
- Execută gruparea K-means pe un anumit set de date pentru diferite valori K (interval de la 1 la 10).
- Pentru fiecare valoare a lui K, se calculează valoarea WCSS.
- Trasează o curbă între valorile WCSS calculate și numărul de clustere K.
- Punctul ascuțit de îndoire sau un punct al diagramei arată ca un braț, atunci acel punct este considerat cea mai bună valoare a lui K.
Deoarece graficul arată îndoirea ascuțită, care arată ca un cot, de aceea este cunoscută ca metoda cotului. Graficul pentru metoda cotului arată ca imaginea de mai jos:
Notă: Putem alege numărul de clustere egal cu punctele de date date. Dacă alegem numărul de clustere egal cu punctele de date, atunci valoarea WCSS devine zero și acesta va fi punctul final al diagramei.
Implementarea Python a algoritmului de grupare K-means
În secțiunea de mai sus, am discutat despre algoritmul K-means, acum să vedem cum poate fi implementat folosind Piton .
Înainte de implementare, să înțelegem ce tip de problemă vom rezolva aici. Deci, avem un set de date de Mall_Clienți , care sunt datele clienților care vizitează mall-ul și cheltuiesc acolo.
enumerare tostring java
În setul de date dat, avem Client_Id, sex, vârstă, venit anual ($) și scor de cheltuieli (care este valoarea calculată a cât a cheltuit un client în mall, cu cât valoarea este mai mare, cu atât a cheltuit mai mult). Din acest set de date, trebuie să calculăm unele modele, deoarece este o metodă nesupravegheată, deci nu știm ce să calculăm exact.
Pașii care trebuie urmați pentru implementare sunt prezentați mai jos:
Pasul 1: Pasul de preprocesare a datelor
Primul pas va fi pre-procesarea datelor, așa cum am făcut-o în subiectele noastre anterioare de regresie și clasificare. Dar pentru problema de clustering, va fi diferită de alte modele. Hai să discutăm:
Așa cum am făcut în subiectele anterioare, în primul rând, vom importa bibliotecile pentru modelul nostru, care face parte din preprocesarea datelor. Codul este dat mai jos:
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
În codul de mai sus, numpy am importat pentru efectuarea calculelor matematice, matplotlib este pentru trasarea graficului și panda sunt pentru gestionarea setului de date.
În continuare, vom importa setul de date pe care trebuie să-l folosim. Deci, aici, folosim setul de date Mall_Customer_data.csv. Poate fi importat folosind codul de mai jos:
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
Prin executarea liniilor de cod de mai sus, vom obține setul de date în IDE-ul Spyder. Setul de date arată ca imaginea de mai jos:
Din setul de date de mai sus, trebuie să găsim câteva modele în el.
Aici nu avem nevoie de nicio variabilă dependentă pentru etapa de preprocesare a datelor, deoarece este o problemă de clustering și nu avem idee despre ce să determinăm. Deci vom adăuga doar o linie de cod pentru matricea de caracteristici.
x = dataset.iloc[:, [3, 4]].values
După cum putem vedea, extragem doar 3rdși 4thcaracteristică. Se datorează faptului că avem nevoie de o diagramă 2d pentru a vizualiza modelul, iar unele caracteristici nu sunt necesare, cum ar fi customer_id.
Pasul 2: Găsirea numărului optim de grupuri folosind metoda cotului
În al doilea pas, vom încerca să găsim numărul optim de clustere pentru problema noastră de clustering. Deci, așa cum am discutat mai sus, aici vom folosi metoda cotului în acest scop.
După cum știm, metoda cotului folosește conceptul WCSS pentru a desena diagrama prin trasarea valorilor WCSS pe axa Y și numărul de clustere pe axa X. Deci, vom calcula valoarea pentru WCSS pentru diferite k valori cuprinse între 1 și 10. Mai jos este codul pentru acesta:
#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()
După cum putem vedea în codul de mai sus, am folosit KMeans clasa de sklearn. biblioteca cluster pentru a forma clusterele.
În continuare, am creat lista_wcss variabilă pentru a inițializa o listă goală, care este folosită pentru a conține valoarea wcss calculată pentru diferite valori ale lui k cuprinse între 1 și 10.
După aceea, am inițializat bucla for pentru iterația pe o valoare diferită a lui k, cuprinsă între 1 și 10; deoarece bucla for în Python, excludeți limita de ieșire, deci este considerată 11 pentru a include 10thvaloare.
Restul codului este similar cu ceea ce am făcut în subiectele anterioare, deoarece am adaptat modelul pe o matrice de caracteristici și apoi am trasat graficul între numărul de clustere și WCSS.
Ieșire: După executarea codului de mai sus, vom obține rezultatul de mai jos:
Din graficul de mai sus, putem vedea punctul cot este la 5. Deci numărul de clustere aici va fi 5.
Pasul 3: Antrenarea algoritmului K-means pe setul de date de antrenament
Deoarece avem numărul de clustere, acum putem antrena modelul pe setul de date.
amisha patel
Pentru a antrena modelul, vom folosi aceleași două linii de cod pe care le-am folosit în secțiunea de mai sus, dar aici, în loc să folosim i, vom folosi 5, deoarece știm că sunt 5 clustere care trebuie formate. Codul este dat mai jos:
#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)
Prima linie este aceeași ca mai sus pentru crearea obiectului clasei KMeans.
În a doua linie de cod, am creat variabila dependentă y_predict pentru a antrena modelul.
Prin executarea liniilor de cod de mai sus, vom obține variabila y_predict. O putem verifica mai jos exploratorul variabil opțiunea în IDE-ul Spyder. Acum putem compara valorile lui y_predict cu setul de date original. Luați în considerare imaginea de mai jos:
Din imaginea de mai sus, putem spune acum că CustomerID 1 aparține unui cluster
3 (deoarece indicele începe de la 0, deci 2 va fi considerat ca 3), iar 2 aparține grupului 4 și așa mai departe.
Pasul 4: Vizualizarea clusterelor
Ultimul pas este vizualizarea clusterelor. Deoarece avem 5 clustere pentru modelul nostru, așa că vom vizualiza fiecare cluster unul câte unul.
Pentru a vizualiza clusterele vor folosi diagrama de dispersie folosind funcția mtp.scatter() a 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()
În liniile de cod de mai sus, am scris cod pentru fiecare cluster, variind de la 1 la 5. Prima coordonată a mtp.scatter, adică x[y_predict == 0, 0] care conține valoarea x pentru afișarea matricei de prezintă valori, iar y_predict variază de la 0 la 1.
Ieșire:
Imaginea de ieșire arată clar cele cinci grupuri diferite cu culori diferite. Clusterele sunt formate între doi parametri ai setului de date; Venitul anual al clientului și cheltuielile. Putem schimba culorile și etichetele în funcție de cerință sau alegere. De asemenea, putem observa câteva puncte din modelele de mai sus, care sunt prezentate mai jos:
- Cluster2 arată că clientul are un venit mare, dar cheltuiește redus, așa că îi putem clasifica ca atent .
- Cluster3 arată veniturile mici și, de asemenea, cheltuielile reduse, astfel încât acestea să poată fi clasificate ca fiind sensibile.
- Cluster4 arată clienții cu venituri mici cu cheltuieli foarte mari, astfel încât să poată fi clasificați ca neglijent .
- Cluster5 arată clienții cu venituri mari și cheltuieli mari, astfel încât aceștia să poată fi clasificați ca țintă, iar acești clienți pot fi cei mai profitabili clienți pentru proprietarul mall-ului.