K-Means Clustering με τη μέθοδο Elbow PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

K-Means Clustering με τη μέθοδο Elbow

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

Ένα σημαντικό πράγμα που πρέπει να θυμάστε όταν χρησιμοποιείτε το K-means, είναι ότι ο αριθμός των συμπλεγμάτων είναι μια υπερπαράμετρος, θα οριστεί πριν την εκτέλεση του μοντέλου.

Το K-means μπορεί να εφαρμοστεί χρησιμοποιώντας το Scikit-Learn με μόλις 3 γραμμές κώδικα. Το Scikit-learn έχει επίσης ήδη διαθέσιμη μια μέθοδο βελτιστοποίησης centroid, kmeans++, που βοηθά το μοντέλο να συγκλίνει πιο γρήγορα.

Για να εφαρμόσουμε τον αλγόριθμο ομαδοποίησης K-means, ας φορτώσουμε το Πιγκουίνοι Πάλμερ σύνολο δεδομένων, επιλέξτε τις στήλες που θα συγκεντρωθούν και χρησιμοποιήστε το Seaborn για να σχεδιάσετε ένα διάγραμμα διασποράς με συμπλέγματα κωδικοποιημένα με χρώμα.

Note: Μπορείτε να κάνετε λήψη του συνόλου δεδομένων από αυτό σύνδεσμος.

Ας εισαγάγουμε τις βιβλιοθήκες και ας φορτώσουμε το σύνολο δεδομένων Penguins, περικόπτοντάς το στις επιλεγμένες στήλες και αφήνοντας σειρές με δεδομένα που λείπουν (υπήρχαν μόνο 2):

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df = pd.read_csv('penguins.csv')
print(df.shape) 
df = df[['bill_length_mm', 'flipper_length_mm']]
df = df.dropna(axis=0)

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο Elbow για να έχουμε ένδειξη συστάδων για τα δεδομένα μας. Συνίσταται στην ερμηνεία μιας γραμμικής πλοκής με σχήμα αγκώνα. Ο αριθμός των συστάδων είναι οι κάμψεις των αγκώνων. Ο άξονας x της γραφικής παράστασης είναι ο αριθμός των συστάδων και ο άξονας y είναι το άθροισμα τετραγώνων εντός συστάδων (WCSS) για κάθε αριθμό συστάδων:

wcss = []

for i in range(1, 11):
    clustering = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering.fit(df)
    wcss.append(clustering.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss);

Η μέθοδος elbow δείχνει ότι τα δεδομένα μας έχουν 2 συστάδες. Ας σχεδιάσουμε τα δεδομένα πριν και μετά την ομαδοποίηση:

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without clustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('Using the elbow method');

K-Means Clustering με τη μέθοδο Elbow PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Αυτό το παράδειγμα δείχνει πώς η μέθοδος Elbow είναι μόνο μια αναφορά όταν χρησιμοποιείται για την επιλογή του αριθμού των συμπλεγμάτων. Γνωρίζουμε ήδη ότι έχουμε 3 τύπους πιγκουίνων στο σύνολο δεδομένων, αλλά αν προσδιορίζαμε τον αριθμό τους χρησιμοποιώντας τη μέθοδο Elbow, το αποτέλεσμα θα ήταν 2 συστάδες.

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

df.describe().T 

Αυτο εχει ως αποτελεσμα:

 					count 	mean 		std 		min 	25% 	50% 	75% 	max
bill_length_mm 		342.0 	43.921930 	5.459584 	32.1 	39.225 	44.45 	48.5 	59.6
flipper_length_mm 	342.0 	200.915205 	14.061714 	172.0 	190.000 197.00 	213.0 	231.0

Παρατηρήστε ότι ο μέσος όρος απέχει πολύ από την τυπική απόκλιση (std), αυτό υποδηλώνει υψηλή διακύμανση. Ας προσπαθήσουμε να το μειώσουμε κλιμακώνοντας τα δεδομένα με το Standard Scaler:

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
scaled = ss.fit_transform(df)

Τώρα, ας επαναλάβουμε τη διαδικασία της μεθόδου Elbow για τα δεδομένα κλίμακας:

wcss_sc = []

for i in range(1, 11):
    clustering_sc = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering_sc.fit(scaled)
    wcss_sc.append(clustering_sc.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss_sc);

K-Means Clustering με τη μέθοδο Elbow PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Ρίξτε μια ματιά στον πρακτικό μας οδηγό για την εκμάθηση του Git, με βέλτιστες πρακτικές, πρότυπα αποδεκτά από τον κλάδο και συμπεριλαμβανόμενο φύλλο εξαπάτησης. Σταματήστε τις εντολές του Git στο Google και πραγματικά μαθαίνουν το!

Αυτή τη φορά, ο προτεινόμενος αριθμός συμπλεγμάτων είναι 3. Μπορούμε να σχεδιάσουμε ξανά τα δεδομένα με τις ετικέτες συμπλέγματος μαζί με τα δύο προηγούμενα για σύγκριση:

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without cliustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('With the Elbow method')
sns.scatterplot(ax=axes[2], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering_sc.labels_).set_title('With the Elbow method and scaled data');

K-Means Clustering με τη μέθοδο Elbow PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Όταν χρησιμοποιείτε το K-means Clustering, πρέπει να προκαθορίσετε τον αριθμό των συμπλεγμάτων. Όπως έχουμε δει όταν χρησιμοποιούμε μια μέθοδο για να επιλέξουμε το δικό μας k τον αριθμό των συστάδων, το αποτέλεσμα είναι μόνο μια πρόταση και μπορεί να επηρεαστεί από το μέγεθος της διακύμανσης στα δεδομένα. Είναι σημαντικό να διεξάγετε μια εις βάθος ανάλυση και να δημιουργήσετε περισσότερα από ένα μοντέλα με διαφορετικά _k_s κατά την ομαδοποίηση.

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

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

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