Clustering Unleashed: Understanding K-Means Clustering - KDnuggets

Clustering Unleashed: Understanding K-Means Clustering – KDnuggets

Κόμβος πηγής: 2786780

Clustering Unleashed: Understanding K-Means Clustering
Εικόνα από συγγραφέα
 

Κατά την ανάλυση των δεδομένων, το θέμα στο μυαλό μας είναι να βρούμε κρυμμένα μοτίβα και να εξάγουμε σημαντικές γνώσεις. Ας μπούμε στη νέα κατηγορία της μάθησης που βασίζεται σε ML, δηλαδή στην μάθηση χωρίς επίβλεψη, στην οποία ένας από τους ισχυρούς αλγόριθμους για την επίλυση των εργασιών ομαδοποίησης είναι ο αλγόριθμος ομαδοποίησης K-Means που φέρνει επανάσταση στην κατανόηση δεδομένων. 

K-Means has become a useful algorithm in machine learning and data mining applications. In this article, we will deep dive into the workings of K-Means, its implementation using Python, and exploring its principles, applications, etc. So, let’s start the journey to unlock the secret patterns and harness the potential of the K-Means clustering algorithm.

Ο αλγόριθμος K-Means χρησιμοποιείται για την επίλυση προβλημάτων ομαδοποίησης που ανήκουν στην τάξη Unsupervised Learning. Με τη βοήθεια αυτού του αλγορίθμου, μπορούμε να ομαδοποιήσουμε τον αριθμό των παρατηρήσεων σε ομάδες K.

 

Clustering Unleashed: Understanding K-Means Clustering
Εικ.1 Αλγόριθμος K-Means Working | Εικόνα από Προς την επιστήμη των δεδομένων
 

Αυτός ο αλγόριθμος εσωτερικά χρησιμοποιεί διανυσματική κβαντοποίηση, μέσω του οποίου μπορούμε να αντιστοιχίσουμε κάθε παρατήρηση στο σύνολο δεδομένων στο σύμπλεγμα με την ελάχιστη απόσταση, που είναι το πρωτότυπο του αλγορίθμου ομαδοποίησης. Αυτός ο αλγόριθμος ομαδοποίησης χρησιμοποιείται συνήθως στην εξόρυξη δεδομένων και τη μηχανική μάθηση για την κατανομή δεδομένων σε συμπλέγματα K βάσει μετρήσεων ομοιότητας. Επομένως, σε αυτόν τον αλγόριθμο, πρέπει να ελαχιστοποιήσουμε το άθροισμα των τετραγώνων της απόστασης μεταξύ των παρατηρήσεων και των αντίστοιχων κεντροειδών τους, κάτι που τελικά καταλήγει σε διακριτές και ομοιογενείς συστάδες.

Εφαρμογές K-means Clustering

Εδώ είναι μερικές από τις τυπικές εφαρμογές αυτού του αλγορίθμου. Ο αλγόριθμος K-means είναι μια τεχνική που χρησιμοποιείται συνήθως σε περιπτώσεις βιομηχανικής χρήσης για την επίλυση προβλημάτων που σχετίζονται με την ομαδοποίηση.

  1. Τμηματοποίηση πελατών: Η ομαδοποίηση K-means μπορεί να τμηματοποιήσει διαφορετικούς πελάτες με βάση τα ενδιαφέροντά τους. Μπορεί να εφαρμοστεί σε τραπεζικές εργασίες, τηλεπικοινωνίες, ηλεκτρονικό εμπόριο, αθλητισμό, διαφήμιση, πωλήσεις κ.λπ.
  1. Ομαδοποίηση εγγράφων: Σε αυτήν την τεχνική, συλλέγουμε παρόμοια έγγραφα από ένα σύνολο εγγράφων, με αποτέλεσμα παρόμοια έγγραφα στα ίδια συμπλέγματα.
  1. Σύσταση κινητήρων: Μερικές φορές, η ομαδοποίηση K-means μπορεί να χρησιμοποιηθεί για τη δημιουργία συστημάτων συστάσεων. Για παράδειγμα, θέλετε να προτείνετε τραγούδια στους φίλους σας. Μπορείτε να δείτε τα τραγούδια που αρέσουν σε αυτό το άτομο και στη συνέχεια να χρησιμοποιήσετε τη ομαδοποίηση για να βρείτε παρόμοια τραγούδια και να προτείνετε τα πιο παρόμοια.

Υπάρχουν πολλές ακόμη εφαρμογές που είμαι βέβαιος ότι έχετε ήδη σκεφτεί, τις οποίες πιθανότατα μοιραστείτε στην ενότητα σχολίων κάτω από αυτό το άρθρο.

Σε αυτήν την ενότητα, θα αρχίσουμε να εφαρμόζουμε τον αλγόριθμο K-Means σε ένα από τα σύνολα δεδομένων χρησιμοποιώντας Python, που χρησιμοποιείται κυρίως σε έργα Επιστήμης Δεδομένων.

1. Εισαγάγετε τις απαραίτητες Βιβλιοθήκες και Εξαρτήματα

Αρχικά, ας εισάγουμε τις βιβλιοθήκες python που χρησιμοποιούμε για την υλοποίηση του αλγόριθμου K-means, συμπεριλαμβανομένων των NumPy, Pandas, Seaborn, Marplotlib κ.λπ.

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

2. Φορτώστε και αναλύστε το σύνολο δεδομένων

Σε αυτό το βήμα, θα φορτώσουμε το σύνολο δεδομένων μαθητή αποθηκεύοντάς το στο πλαίσιο δεδομένων Pandas. Για να κατεβάσετε το σύνολο δεδομένων, μπορείτε να ανατρέξετε στον σύνδεσμο εδώ.

Ο πλήρης αγωγός του προβλήματος φαίνεται παρακάτω:

 

Clustering Unleashed: Understanding K-Means Clustering
Εικ. 2 Αγωγός Έργου | Εικόνα από τον συγγραφέα
 

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

3. Σχέδιο διασποράς του συνόλου δεδομένων

Τώρα έρχεται το βήμα της μοντελοποίησης είναι η οπτικοποίηση των δεδομένων, επομένως χρησιμοποιούμε το matplotlib για να σχεδιάσουμε το διάγραμμα διασποράς για να ελέγξουμε πώς λειτουργεί ο αλγόριθμος ομαδοποίησης και να δημιουργήσουμε διαφορετικά συμπλέγματα. 

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

 

Παραγωγή:

 

Clustering Unleashed: Understanding K-Means Clustering
Εικ.3 Οικόπεδο Scatter | Εικόνα από συγγραφέα

4. Εισαγάγετε το K-Means από την κλάση Cluster του Scikit-learn

Τώρα, καθώς πρέπει να εφαρμόσουμε την ομαδοποίηση K-Means, εισάγουμε πρώτα την κλάση συμπλέγματος και μετά έχουμε το KMeans ως ενότητα αυτής της κλάσης. 

from sklearn.cluster import KMeans

5. Εύρεση της βέλτιστης τιμής του K χρησιμοποιώντας τη μέθοδο Elbow

Σε αυτό το βήμα, θα βρούμε τη βέλτιστη τιμή του K, μιας από τις υπερπαραμέτρους, κατά την υλοποίηση του αλγόριθμου. Η τιμή K υποδηλώνει πόσα συμπλέγματα πρέπει να δημιουργήσουμε για το σύνολο δεδομένων μας. Η εύρεση αυτής της τιμής διαισθητικά δεν είναι δυνατή, επομένως για να βρούμε τη βέλτιστη τιμή, θα δημιουργήσουμε μια γραφική παράσταση μεταξύ WCSS (εντός συστάδας-άθροισμα-τετράγωνων) και διαφορετικών τιμών K, και πρέπει να επιλέξουμε αυτό το K, το οποίο μας δίνει την ελάχιστη τιμή του 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_) 

 

Τώρα, ας σχεδιάσουμε το διάγραμμα του αγκώνα για να βρούμε τη βέλτιστη τιμή του K.

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

 

Παραγωγή:

 

Clustering Unleashed: Understanding K-Means Clustering
Εικ.4 Οικόπεδο με αγκώνα | Εικόνα από συγγραφέα
 

Από το παραπάνω οικόπεδο του αγκώνα, μπορούμε να δούμε στο K=4. υπάρχει μια πτώση στην τιμή του WCSS, που σημαίνει ότι αν χρησιμοποιήσουμε τη βέλτιστη τιμή ως 4, σε αυτήν την περίπτωση, η ομαδοποίηση θα σας δώσει καλή απόδοση. 

6. Προσαρμόστε τον αλγόριθμο K-Means με τη Βέλτιστη τιμή του K

Τελειώσαμε με την εύρεση της βέλτιστης τιμής του K. Τώρα, ας κάνουμε τη μοντελοποίηση όπου θα δημιουργήσουμε έναν πίνακα X που αποθηκεύει το πλήρες σύνολο δεδομένων έχοντας όλα τα χαρακτηριστικά. Δεν χρειάζεται να διαχωρίσετε το διάνυσμα στόχου και χαρακτηριστικού εδώ, καθώς πρόκειται για ένα πρόβλημα χωρίς επίβλεψη. Μετά από αυτό, θα δημιουργήσουμε ένα αντικείμενο της κλάσης KMeans με μια επιλεγμένη τιμή K και στη συνέχεια θα το προσαρμόσουμε στο παρεχόμενο σύνολο δεδομένων. Τέλος, εκτυπώνουμε το y_means, το οποίο υποδεικνύει τους μέσους όρους των διαφορετικών συστάδων που σχηματίστηκαν. 

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. Ελέγξτε την Ανάθεση Cluster για κάθε Κατηγορία

Ας ελέγξουμε ποια σημεία του συνόλου δεδομένων ανήκουν σε ποιο σύμπλεγμα. 

X[y_means == 3,1]

 

Μέχρι τώρα, για την προετοιμασία του κέντρου, χρησιμοποιούσαμε τη στρατηγική K-Means++,  τώρα, ας αρχικοποιήσουμε τα τυχαία κεντροειδή αντί για το K-Means++ και ας συγκρίνουμε τα αποτελέσματα ακολουθώντας την ίδια διαδικασία. 

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

 

Ελέγξτε πόσες τιμές ταιριάζουν. 

sum(y_means == y_means_new)

8. Οπτικοποίηση των συμπλεγμάτων 

Για να οπτικοποιήσουμε κάθε συστάδα, τα σχεδιάζουμε στους άξονες και αντιστοιχίζουμε διαφορετικά χρώματα μέσα από τα οποία μπορούμε εύκολα να δούμε να σχηματίζονται 4 συστάδες. 

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

 

Παραγωγή:

 

Clustering Unleashed: Understanding K-Means Clustering
Εικ. 5 Οπτικοποίηση συστάδων που σχηματίστηκαν | Εικόνα από τον συγγραφέα

9. K-Means σε 3D-Data

Καθώς το προηγούμενο σύνολο δεδομένων έχει 2 στήλες, έχουμε ένα πρόβλημα 2-Δ. Τώρα, θα χρησιμοποιήσουμε το ίδιο σύνολο βημάτων για ένα τρισδιάστατο πρόβλημα και θα προσπαθήσουμε να αναλύσουμε την αναπαραγωγιμότητα του κώδικα για δεδομένα n-διαστάσεων. 

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

 

Παραγωγή:

 

Clustering Unleashed: Understanding K-Means Clustering
Εικ. 6 Σχέδιο διασποράς τρισδιάστατου συνόλου δεδομένων | Εικόνα από τον συγγραφέα
 

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)

 

Παραγωγή:

 

Clustering Unleashed: Understanding K-Means Clustering
Εικ.7 Οικόπεδο με αγκώνα | Εικόνα από συγγραφέα
 

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

 

Παραγωγή:

 

Clustering Unleashed: Understanding K-Means Clustering
Εικ.8. Οπτικοποίηση συμπλεγμάτων | Εικόνα από συγγραφέα
 

You can find the complete code here –  Σημειωματάριο Colab

Αυτό ολοκληρώνει τη συζήτησή μας. Έχουμε συζητήσει την εργασία, την εφαρμογή και τις εφαρμογές του K-Means. Συμπερασματικά, η υλοποίηση των εργασιών ομαδοποίησης είναι ένας ευρέως χρησιμοποιούμενος αλγόριθμος από την τάξη της μη εποπτευόμενης μάθησης που παρέχει μια απλή και διαισθητική προσέγγιση για την ομαδοποίηση των παρατηρήσεων ενός συνόλου δεδομένων. Η κύρια δύναμη αυτού του αλγορίθμου είναι να χωρίζει τις παρατηρήσεις σε πολλαπλά σύνολα με βάση τις επιλεγμένες μετρήσεις ομοιότητας με τη βοήθεια του χρήστη που εφαρμόζει τον αλγόριθμο. 

Ωστόσο, με βάση την επιλογή των κεντροειδών στο πρώτο βήμα, ο αλγόριθμός μας συμπεριφέρεται διαφορετικά και συγκλίνει σε τοπικό ή παγκόσμιο βέλτιστο. Επομένως, η επιλογή του αριθμού των συστάδων για την υλοποίηση του αλγόριθμου, η προεπεξεργασία των δεδομένων, ο χειρισμός των ακραίων τιμών κ.λπ., είναι ζωτικής σημασίας για την επίτευξη καλών αποτελεσμάτων. Αλλά αν παρατηρήσουμε την άλλη πλευρά αυτού του αλγορίθμου πίσω από τους περιορισμούς, το K-Means είναι μια χρήσιμη τεχνική για διερευνητική ανάλυση δεδομένων και αναγνώριση προτύπων σε διάφορους τομείς.
 
 
Άριαν Γκαργκ είναι B.Tech. Φοιτητής Ηλεκτρολόγος Μηχανικός, στο τελευταίο έτος του προπτυχιακού του. Το ενδιαφέρον του βρίσκεται στον τομέα της Ανάπτυξης Ιστού και της Μηχανικής Μάθησης. Έχει επιδιώξει αυτό το ενδιαφέρον και είναι πρόθυμος να εργαστεί περισσότερο προς αυτές τις κατευθύνσεις.
 

Σφραγίδα ώρας:

Περισσότερα από KDnuggets