Clustering Unleashed: Understanding K-Means Clustering – KDnuggets

Clustering Unleashed: Understanding K-Means Clustering – KDnuggets

Izvorno vozlišče: 2786780

Clustering Unleashed: Understanding K-Means Clustering
Slika avtorja
 

Med analiziranjem podatkov je stvar v našem umu iskanje skritih vzorcev in pridobivanje pomembnih vpogledov. Vstopimo v novo kategorijo učenja, ki temelji na ML, tj. nenadzorovanega učenja, v katerem je eden od močnih algoritmov za reševanje nalog združevanja v gruče algoritem za združevanje v gruče K-Means, ki revolucionira razumevanje podatkov. 

K-Means je postal uporaben algoritem v aplikacijah strojnega učenja in podatkovnega rudarjenja. V tem članku se bomo poglobili v delovanje K-Means, njegovo implementacijo s Pythonom in raziskali njegova načela, aplikacije itd. Začnimo torej potovanje, da odklenemo skrivne vzorce in izkoristimo potencial K-Means algoritem združevanja v gruče.

Algoritem K-Means se uporablja za reševanje problemov združevanja v gruče, ki spadajo v razred nenadzorovanega učenja. S pomočjo tega algoritma lahko število opazovanj združimo v K skupin.

 

Clustering Unleashed: Understanding K-Means Clustering
Slika 1 Delovanje algoritma K-Means | Slika iz Proti znanosti o podatkih
 

Ta algoritem interno uporablja vektorsko kvantizacijo, prek katere lahko vsako opazovanje v naboru podatkov dodelimo gruči z najmanjšo razdaljo, ki je prototip algoritma za gručevanje. Ta algoritem združevanja v gruče se običajno uporablja pri rudarjenju podatkov in strojnem učenju za particioniranje podatkov v K gruč na podlagi meritev podobnosti. Zato moramo v tem algoritmu minimizirati vsoto kvadratov razdalje med opazovanji in njihovimi ustreznimi centroidi, kar na koncu povzroči različne in homogene grozde.

Aplikacije združevanja v gruče K-means

Tukaj je nekaj standardnih aplikacij tega algoritma. Algoritem K-means je pogosto uporabljena tehnika v primerih industrijske uporabe za reševanje problemov, povezanih z združevanjem v gruče.

  1. Segmentacija strank: K-means grozdenja lahko segmentira različne stranke glede na njihove interese. Uporablja se lahko za bančništvo, telekomunikacije, e-trgovino, šport, oglaševanje, prodajo itd.
  1. Združevanje dokumentov v gruče: Pri tej tehniki bomo podobne dokumente združili iz nabora dokumentov, kar bo imelo za posledico podobne dokumente v istih gručah.
  1. Priporočila motorjev: Včasih se lahko združevanje v skupine K-means uporabi za ustvarjanje sistemov priporočil. Na primer, želite priporočiti pesmi svojim prijateljem. Ogledate si lahko pesmi, ki so bile tej osebi všeč, nato pa z združevanjem v skupine poiščete podobne pesmi in priporočite najbolj podobne.

Obstaja veliko drugih aplikacij, za katere sem prepričan, da ste že pomislili in jih verjetno delite v razdelku s komentarji pod tem člankom.

V tem razdelku bomo začeli izvajati algoritem K-Means na enem od naborov podatkov z uporabo Pythona, ki se večinoma uporablja v projektih Data Science.

1. Uvozite potrebne knjižnice in odvisnosti

Najprej uvozimo knjižnice python, ki jih uporabljamo za implementacijo algoritma K-means, vključno z NumPy, Pandas, Seaborn, Marplotlib itd.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb

2. Naložite in analizirajte nabor podatkov

V tem koraku bomo naložili nabor podatkov študentov tako, da jih shranimo v podatkovni okvir Pandas. Za prenos nabora podatkov se lahko obrnete na povezavo tukaj.

Celoten cevovod težave je prikazan spodaj:

 

Clustering Unleashed: Understanding K-Means Clustering
Slika 2 Projektni načrt | Slika avtorja
 

df = pd.read_csv('student_clustering.csv')
print("The shape of data is",df.shape)
df.head()

3. Raztreseni grafikon nabora podatkov

Zdaj sledi korak modeliranja, ki je vizualizacija podatkov, zato uporabimo matplotlib za risanje razpršenega grafa, da preverimo, kako deluje algoritem združevanja v gruče in ustvarimo različne gruče. 

# Scatter plot of the dataset
import matplotlib.pyplot as plt
plt.scatter(df['cgpa'],df['iq'])

 

izhod:

 

Clustering Unleashed: Understanding K-Means Clustering
Slika 3 Raztreseni grafikon | Slika avtorja

4. Uvozite K-means iz razreda gruče Scikit-learn

Zdaj, ko moramo implementirati združevanje v gruče K-Means, najprej uvozimo razred gruče, nato pa imamo KMeans kot modul tega razreda. 

from sklearn.cluster import KMeans

5. Iskanje optimalne vrednosti K z uporabo metode komolca

V tem koraku bomo med izvajanjem algoritma našli optimalno vrednost K, enega od hiperparametrov. Vrednost K označuje, koliko gruč moramo ustvariti za naš nabor podatkov. Intuitivno iskanje te vrednosti ni mogoče, zato bomo za iskanje optimalne vrednosti ustvarili graf med WCSS(znotraj gruče-vsota-kvadratov) in različnimi K-vrednostmi, pri čemer moramo izbrati tisti K, ki nam daje minimalno vrednost WCSS.

# create an empty list for store residuals
wcss = [] for i in range(1,11): # create an object of K-Means class km = KMeans(n_clusters=i) # pass the dataframe to fit the algorithm km.fit_predict(df) # append inertia value to wcss list wcss.append(km.inertia_) 

 

Zdaj pa narišimo komolec, da poiščemo optimalno vrednost K.

# Plot of WCSS vs. K to check the optimal value of K
plt.plot(range(1,11),wcss)

 

izhod:

 

Clustering Unleashed: Understanding K-Means Clustering
Slika 4 Komolec | Slika avtorja
 

Iz zgornjega komolca lahko vidimo pri K=4; obstaja padec vrednosti WCSS, kar pomeni, da če uporabimo optimalno vrednost kot 4, vam bo v tem primeru združevanje v gruče zagotovilo dobro zmogljivost. 

6. Prilagodite algoritem K-Means z optimalno vrednostjo K

Končali smo z iskanjem optimalne vrednosti K. Zdaj pa izvedimo modeliranje, kjer bomo ustvarili matriko X, ki bo shranila celoten nabor podatkov z vsemi funkcijami. Tu ni potrebe po ločevanju ciljnega in značilnega vektorja, saj gre za nenadzorovan problem. Po tem bomo ustvarili objekt razreda KMeans z izbrano vrednostjo K in ga nato prilagodili ponujenemu naboru podatkov. Na koncu natisnemo y_means, ki označuje povprečja različnih oblikovanih grozdov. 

X = df.iloc[:,:].values # complete data is used for model building
km = KMeans(n_clusters=4)
y_means = km.fit_predict(X)
y_means

7. Preverite dodelitev gruče vsake kategorije

Preverimo, katere vse točke v naboru podatkov pripadajo kateremu grozdu. 

X[y_means == 3,1]

 

Do zdaj smo za inicializacijo centroidov uporabljali strategijo K-Means++, zdaj pa inicializirajmo naključne centroide namesto K-Means++ in primerjajmo rezultate po istem postopku. 

km_new = KMeans(n_clusters=4, init='random')
y_means_new = km_new.fit_predict(X)
y_means_new

 

Preverite, koliko vrednosti se ujemajo. 

sum(y_means == y_means_new)

8. Vizualizacija grozdov 

Za vizualizacijo vsakega grozda jih narišemo na osi in jim dodelimo različne barve, skozi katere zlahka vidimo nastale 4 grozde. 

plt.scatter(X[y_means == 0,0],X[y_means == 0,1],color='blue')
plt.scatter(X[y_means == 1,0],X[y_means == 1,1],color='red') plt.scatter(X[y_means == 2,0],X[y_means == 2,1],color='green') plt.scatter(X[y_means == 3,0],X[y_means == 3,1],color='yellow')

 

izhod:

 

Clustering Unleashed: Understanding K-Means Clustering
Slika 5 Vizualizacija oblikovanih grozdov | Slika avtorja

9. K-sredstva za 3D-podatke

Ker ima prejšnji nabor podatkov 2 stolpca, imamo 2-D problem. Zdaj bomo uporabili isti nabor korakov za 3-D problem in poskušali analizirati ponovljivost kode za n-dimenzionalne podatke. 

# Create a synthetic dataset from sklearn
from sklearn.datasets import make_blobs # make synthetic dataset
centroids = [(-5,-5,5),(5,5,-5),(3.5,-2.5,4),(-2.5,2.5,-4)]
cluster_std = [1,1,1,1]
X,y = make_blobs(n_samples=200,cluster_std=cluster_std,centers=centroids,n_features=3,random_state=1)

 

# Scatter plot of the dataset
import plotly.express as px
fig = px.scatter_3d(x=X[:,0], y=X[:,1], z=X[:,2])
fig.show()

 

izhod:

 

Clustering Unleashed: Understanding K-Means Clustering
Slika 6 Raztreseni grafikon nabora 3-D podatkov | Slika avtorja
 

wcss = []
for i in range(1,21): km = KMeans(n_clusters=i) km.fit_predict(X) wcss.append(km.inertia_) plt.plot(range(1,21),wcss)

 

izhod:

 

Clustering Unleashed: Understanding K-Means Clustering
Slika 7 Komolec | Slika avtorja
 

# Fit the K-Means algorithm with the optimal value of K
km = KMeans(n_clusters=4)
y_pred = km.fit_predict(X)

 

# Analyse the different clusters formed
df = pd.DataFrame()
df['col1'] = X[:,0]
df['col2'] = X[:,1]
df['col3'] = X[:,2]
df['label'] = y_pred fig = px.scatter_3d(df,x='col1', y='col2', z='col3',color='label')
fig.show()

 

izhod:

 

Clustering Unleashed: Understanding K-Means Clustering
Slika 8. Vizualizacija grozdov | Slika avtorja
 

Celotno kodo najdete tukaj –  Beležnica Colab

S tem je naša razprava zaključena. Razpravljali smo o delovanju, izvedbi in aplikacijah K-Means. Skratka, izvajanje nalog združevanja v gruče je pogosto uporabljen algoritem iz razreda nenadzorovanega učenja, ki zagotavlja preprost in intuitiven pristop k združevanju opazovanj nabora podatkov. Glavna moč tega algoritma je razdelitev opazovanj v več nizov na podlagi izbranih metrik podobnosti s pomočjo uporabnika, ki implementira algoritem. 

Vendar pa se naš algoritem na podlagi izbire centroidov v prvem koraku obnaša drugače in konvergira k lokalnim ali globalnim optimumom. Zato je izbira števila gruč za implementacijo algoritma, predhodna obdelava podatkov, ravnanje z odstopanji itd. ključnega pomena za doseganje dobrih rezultatov. Toda če opazujemo drugo stran tega algoritma za omejitvami, je K-Means koristna tehnika za raziskovalno analizo podatkov in prepoznavanje vzorcev na različnih področjih.
 
 
Aryan Garg je B.Tech. Študent elektrotehnike, trenutno v zadnjem letniku dodiplomskega študija. Njegovo zanimanje je področje spletnega razvoja in strojnega učenja. Zasledoval je to zanimanje in si želi še več delati v teh smereh.
 

Časovni žig:

Več od KDnuggets