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:
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:
- 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:
- 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:
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.
- 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:
- Nato bomo vsako podatkovno točko znova dodelili novemu centroidu. Za to bomo ponovili isti postopek iskanja srednje črte. Mediana bo podobna spodnji sliki:
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.
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:
- Ko smo dobili nove centroide, bomo ponovno narisali srednjo črto in znova dodelili podatkovne točke. Torej, slika bo:
- 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:
Ker je naš model pripravljen, lahko zdaj odstranimo predpostavljene centroide in dva končna grozda bosta, kot je prikazano na spodnji sliki:
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)2V 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:
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:
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:
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.
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
Iz zgornjega nabora podatkov moramo najti nekaj vzorcev v njem.
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:
Iz zgornje risbe lahko vidimo, da je točka komolca pri 5. Torej bo število grozdov tukaj 5.
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:
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:
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:
- 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.