logo

Algoritem združevanja v skupine K-Means

K-Means Clustering je algoritem za nenadzorovano učenje, ki se uporablja za reševanje težav z grozdenjem v strojnem učenju ali podatkovni znanosti. V tej temi bomo izvedeli, kaj je algoritem združevanja v gruče K-means, kako algoritem deluje, skupaj z implementacijo združevanja k-means v gruče v Pythonu.

Kaj je algoritem K-Means?

K-Means Clustering je Algoritem nenadzorovanega učenja , ki združuje neoznačen nabor podatkov v različne gruče. Tukaj K določa število vnaprej določenih gruč, ki jih je treba ustvariti v procesu, kot če je K=2, bosta dve gruči, za K=3 pa trije gruči itd.

To je iterativni algoritem, ki razdeli neoznačen nabor podatkov v k različnih grozdov na tak način, da vsak nabor podatkov pripada samo eni skupini s podobnimi lastnostmi.

Omogoča nam združevanje podatkov v različne skupine in priročen način za samostojno odkrivanje kategorij skupin v neoznačenem naboru podatkov, ne da bi bilo potrebno kakršno koli usposabljanje.

To je algoritem, ki temelji na centroidu, kjer je vsaka gruča povezana s centroidom. Glavni cilj tega algoritma je zmanjšati vsoto razdalj med podatkovno točko in njihovimi ustreznimi grozdi.

Algoritem vzame neoznačen nabor podatkov kot vhod, razdeli nabor podatkov na k-število gruč in ponavlja postopek, dokler ne najde najboljših gruč. Vrednost k mora biti vnaprej določena v tem algoritmu.

K-pomeni grozdenje Algoritem v glavnem opravlja dve nalogi:

kaj je 10 od 100
  • Z iterativnim postopkom določi najboljšo vrednost za K središčne točke ali centroide.
  • Vsako podatkovno točko dodeli najbližjemu k-središču. Tiste podatkovne točke, ki so blizu določenega k-centra, ustvarijo gručo.

Zato ima vsaka gruča podatkovne točke z nekaterimi skupnostmi in je oddaljena od drugih gruč.

Spodnji diagram pojasnjuje delovanje algoritma za združevanje v skupine K-means:

Algoritem združevanja v skupine K-Means

Kako deluje algoritem K-Means?

Delovanje algoritma K-Means je razloženo v spodnjih korakih:

Korak 1: Izberite število K, da določite število grozdov.

2. korak: Izberite naključne K točke ali centroide. (Lahko je tudi drugo iz vhodnega nabora podatkov).

3. korak: Vsako podatkovno točko dodelite najbližjemu centroidu, ki bo tvoril vnaprej določene gruče K.

4. korak: Izračunajte varianco in postavite nov centroid vsake gruče.

5. korak: Ponovite tretje korake, kar pomeni, da vsako podatkovno točko znova dodelite novemu najbližjemu centroidu vsake gruče.

6. korak: Če pride do kakršne koli ponovne dodelitve, pojdite na 4. korak, drugače pojdite na KONČAJ.

7. korak : Model je pripravljen.

Razumejmo zgornje korake z upoštevanjem vizualnih risb:

Recimo, da imamo dve spremenljivki M1 in M2. Graf razpršenosti teh dveh spremenljivk na osi x-y je podan spodaj:

Algoritem združevanja v skupine K-Means
  • Vzemimo število k grozdov, tj. K=2, da identificiramo nabor podatkov in jih postavimo v različne grozde. To pomeni, da bomo poskušali te nabore podatkov združiti v dve različni skupini.
  • Izbrati moramo nekaj naključnih k točk ali centroida, da tvorimo gručo. Te točke so lahko točke iz nabora podatkov ali katera koli druga točka. Torej tukaj izberemo spodnji dve točki kot k točk, ki nista del našega nabora podatkov. Razmislite o spodnji sliki:
    Algoritem združevanja v skupine K-Means
  • Zdaj bomo vsako podatkovno točko razpršenega grafa dodelili njeni najbližji K-točki ali centroidu. Izračunali jo bomo z uporabo nekaj matematike, ki smo jo preučevali za izračun razdalje med dvema točkama. Torej bomo narisali mediano med obema centroidoma. Razmislite o spodnji sliki:
    Algoritem združevanja v skupine K-Means

Iz zgornje slike je jasno razvidno, da so točke na levi strani črte blizu K1 ali modrega središča, točke na desni strani črte pa blizu rumenega središča. Za jasno vizualizacijo jih pobarvajmo v modro in rumeno.

Algoritem združevanja v skupine K-Means
  • Ker moramo najti najbližjo gručo, bomo postopek z izbiro ponovili novo središče . Za izbiro novih centroidov bomo izračunali težišče teh centroidov in našli nove centroide, kot je prikazano spodaj:
    Algoritem združevanja v skupine K-Means
  • Nato bomo vsako podatkovno točko znova dodelili novemu centroidu. Za to bomo ponovili isti postopek iskanja srednje črte. Mediana bo podobna spodnji sliki:
    Algoritem združevanja v skupine K-Means

Na zgornji sliki lahko vidimo, da je ena rumena točka na levi strani črte, dve modri točki pa sta tik ob črti. Torej bodo te tri točke dodeljene novim centroidom.

Algoritem združevanja v skupine K-Means

Ker je prišlo do ponovne dodelitve, bomo ponovno prešli na 4. korak, ki je iskanje novih centroidov ali K-točk.

  • Postopek bomo ponovili z iskanjem težišča centroidov, tako da bodo novi centroidi takšni, kot je prikazano na spodnji sliki:
    Algoritem združevanja v skupine K-Means
  • Ko smo dobili nove centroide, bomo ponovno narisali srednjo črto in znova dodelili podatkovne točke. Torej, slika bo:
    Algoritem združevanja v skupine K-Means
  • Na zgornji sliki lahko vidimo; na obeh straneh črte ni različnih podatkovnih točk, kar pomeni, da je naš model oblikovan. Razmislite o spodnji sliki:
    Algoritem združevanja v skupine K-Means

Ker je naš model pripravljen, lahko zdaj odstranimo predpostavljene centroide in dva končna grozda bosta, kot je prikazano na spodnji sliki:

Algoritem združevanja v skupine K-Means

Kako izbrati vrednost 'K števila gruč' v K-means Clustering?

Učinkovitost algoritma za združevanje v gruče K-means je odvisna od visoko učinkovitih gruč, ki jih tvori. Toda izbira optimalnega števila grozdov je velika naloga. Obstaja nekaj različnih načinov za iskanje optimalnega števila grozdov, vendar tukaj razpravljamo o najprimernejši metodi za iskanje števila grozdov ali vrednosti K. Metoda je podana spodaj:

Metoda komolca

Metoda Elbow je eden najbolj priljubljenih načinov za iskanje optimalnega števila grozdov. Ta metoda uporablja koncept vrednosti WCSS. WCSS pomeni Znotraj grozda Vsota kvadratov , ki definira skupne variacije znotraj gruče. Formula za izračun vrednosti WCSS (za 3 grozde) je navedena spodaj:

WCSS= ∑pjaz v grozdu1razdalja (PjazC1)2+∑pjaz v grozdu 2razdalja (PjazC2)2+∑pjaz v CLuster3razdalja (PjazC3)2

V zgornji formuli WCSS je

pjaz v grozdu1razdalja (PjazC1)2: Je vsota kvadratov razdalj med vsako podatkovno točko in njenim težiščem znotraj gruče1 in je enaka za druga dva člena.

Za merjenje razdalje med podatkovnimi točkami in centroidom lahko uporabimo katero koli metodo, kot je evklidska razdalja ali manhattanska razdalja.

Če želite najti optimalno vrednost grozdov, metoda komolca sledi spodnjim korakom:

  • Izvaja združevanje v skupine K-means na danem naboru podatkov za različne vrednosti K (v razponu od 1 do 10).
  • Za vsako vrednost K izračuna vrednost WCSS.
  • Nariše krivuljo med izračunanimi vrednostmi WCSS in številom grozdov K.
  • Ostra točka zavoja ali točka risbe je videti kot roka, potem se ta točka šteje za najboljšo vrednost K.

Ker graf prikazuje ostro krivino, ki je videti kot komolec, je zato znana kot metoda komolca. Graf za metodo komolca izgleda kot spodnja slika:

Algoritem združevanja v skupine K-Means

Opomba: Izberemo lahko število grozdov, ki je enako danim podatkovnim točkam. Če izberemo število gruč, ki je enako podatkovnim točkam, potem vrednost WCSS postane nič in to bo končna točka grafa.

Python implementacija algoritma za združevanje v gruče K-means

V zgornjem razdelku smo razpravljali o algoritmu K-means, zdaj pa poglejmo, kako ga je mogoče implementirati z Python .

Pred izvedbo poglejmo, kakšno vrsto problema bomo rešili tukaj. Torej, imamo nabor podatkov Mall_Customers , ki so podatki strank, ki obiščejo nakupovalno središče in tam zapravijo.

V danem naboru podatkov imamo Customer_Id, spol, starost, letni dohodek ($) in ocena porabe (kar je izračunana vrednost, koliko je stranka porabila v nakupovalnem središču, večja je vrednost, več je porabil). Iz tega nabora podatkov moramo izračunati nekaj vzorcev, saj gre za nenadzorovano metodo, zato ne vemo, kaj natančno izračunati.

Spodaj so navedeni koraki, ki jih je treba upoštevati pri izvedbi:

    Predhodna obdelava podatkov Iskanje optimalnega števila grozdov z metodo komolca Usposabljanje algoritma K-means na naboru podatkov za usposabljanje Vizualizacija grozdov

Korak 1: Korak predhodne obdelave podatkov

Prvi korak bo predhodna obdelava podatkov, kot smo to storili v prejšnjih temah Regresija in klasifikacija. Toda glede težave z grozdenjem se bo razlikoval od drugih modelov. Pogovorimo se o tem:

    Uvažanje knjižnic
    Kot smo storili v prejšnjih temah, bomo najprej uvozili knjižnice za naš model, ki je del predhodne obdelave podatkov. Koda je navedena spodaj:
 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

V zgornji kodi je numpy smo uvozili za izvajanje matematičnih izračunov, matplotlib je za risanje grafa in pande so za upravljanje nabora podatkov.

    Uvažanje nabora podatkov:
    Nato bomo uvozili nabor podatkov, ki ga moramo uporabiti. Tukaj torej uporabljamo nabor podatkov Mall_Customer_data.csv. Lahko ga uvozite s spodnjo kodo:
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Z izvedbo zgornjih vrstic kode bomo dobili naš nabor podatkov v Spyder IDE. Nabor podatkov je videti kot spodnja slika:

program java hello
Algoritem združevanja v skupine K-Means

Iz zgornjega nabora podatkov moramo najti nekaj vzorcev v njem.

    Ekstrahiranje neodvisnih spremenljivk

Tukaj ne potrebujemo nobene odvisne spremenljivke za korak predhodne obdelave podatkov, saj gre za problem združevanja v gruče in nimamo pojma, kaj naj določimo. Zato bomo samo dodali vrstico kode za matriko funkcij.

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

Kot lahko vidimo, ekstrahiramo le 3rdin 4thfunkcija. To je zato, ker potrebujemo 2D izris za vizualizacijo modela, nekatere funkcije pa niso potrebne, kot je customer_id.

2. korak: Iskanje optimalnega števila grozdov z uporabo metode komolcev

V drugem koraku bomo poskušali najti optimalno število gruč za naš problem gručenja. Torej, kot je razloženo zgoraj, bomo tukaj za ta namen uporabili metodo komolca.

Kot vemo, metoda komolca uporablja koncept WCSS za risanje grafa tako, da vrednosti WCSS nariše na os Y in število grozdov na os X. Tako bomo izračunali vrednost za WCSS za različne vrednosti k v razponu od 1 do 10. Spodaj je koda za to:

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

Kot lahko vidimo v zgornji kodi, smo uporabili KMeans razred sklearn. knjižnico gruč za oblikovanje gruč.

Nato smo ustvarili wcss_list spremenljivka za inicializacijo praznega seznama, ki se uporablja za vsebovanje vrednosti wcss, izračunane za različne vrednosti k v razponu od 1 do 10.

Po tem smo inicializirali zanko for za iteracijo z drugo vrednostjo k v razponu od 1 do 10; ker zanka for v Pythonu izključi izhodno omejitev, zato se upošteva kot 11, da vključi 10thvrednost.

Preostali del kode je podoben kot v prejšnjih temah, saj smo model prilagodili matriki funkcij in nato narisali graf med številom gruč in WCSS.

Izhod: Po izvedbi zgornje kode bomo dobili spodnji rezultat:

Algoritem združevanja v skupine K-Means

Iz zgornje risbe lahko vidimo, da je točka komolca pri 5. Torej bo število grozdov tukaj 5.

Algoritem združevanja v skupine K-Means

3. korak: Usposabljanje algoritma K-means na naboru podatkov za usposabljanje

Ker imamo število gruč, lahko zdaj urimo model na naboru podatkov.

Za usposabljanje modela bomo uporabili isti dve vrstici kode, kot smo jo uporabili v zgornjem razdelku, vendar bomo tukaj namesto uporabe i uporabili 5, saj vemo, da je treba oblikovati 5 gruč. Koda je navedena spodaj:

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

Prva vrstica je enaka kot zgoraj za ustvarjanje predmeta razreda KMeans.

V drugi vrstici kode smo ustvarili odvisno spremenljivko y_predikt za usposabljanje modela.

Z izvedbo zgornjih vrstic kode bomo dobili spremenljivko y_predict. Lahko preverimo pod raziskovalec spremenljivk možnost v Spyder IDE. Zdaj lahko primerjamo vrednosti y_predict z našim izvirnim naborom podatkov. Razmislite o spodnji sliki:

Algoritem združevanja v skupine K-Means

Iz zgornje slike lahko zdaj ugotovimo, da CustomerID 1 pripada gruči

3 (ker se indeks začne z 0, bo zato 2 obravnavan kot 3), 2 pa pripada gruči 4 itd.

4. korak: Vizualizacija grozdov

Zadnji korak je vizualizacija grozdov. Ker imamo za naš model 5 gruč, bomo vsako gručo vizualizirali enega za drugim.

Za vizualizacijo grozdov bo uporabljen razpršeni graf z uporabo funkcije mtp.scatter() 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() 

V zgornjih vrsticah kode smo zapisali kodo za vsako gručo v razponu od 1 do 5. Prva koordinata mtp.scatter, tj. x[y_predict == 0, 0], ki vsebuje vrednost x za prikaz matrike vsebuje vrednosti, y_predict pa je v razponu od 0 do 1.

Izhod:

Algoritem združevanja v skupine K-Means

Izhodna slika jasno prikazuje pet različnih grozdov z različnimi barvami. Grozdi so oblikovani med dvema parametroma nabora podatkov; Letni dohodek stranke in poraba. Barve in oznake lahko spremenimo glede na zahtevo ali izbiro. Opazimo lahko tudi nekaj točk iz zgornjih vzorcev, ki so podani spodaj:

    Grozd1prikazuje stranke s povprečno plačo in povprečno porabo, tako da lahko te stranke kategoriziramo
  • Grozd2 kaže, da ima stranka visok dohodek, vendar nizko porabo, zato jo lahko kategoriziramo kot previden .
  • Grozd 3 prikazuje nizek dohodek in tudi nizko porabo, tako da jih je mogoče kategorizirati kot razumne.
  • Grozd 4 prikazuje stranke z nizkimi dohodki z zelo visoko porabo, tako da jih je mogoče kategorizirati nepreviden .
  • Grozd 5 prikazuje stranke z visokim dohodkom in visoko porabo, tako da jih je mogoče kategorizirati kot ciljne, in te stranke so lahko najbolj donosne stranke za lastnika trgovskega centra.