K-Means Elbow Method and Silhouette Analysis with Yellowbrick και Scikit-Learn PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

K-Means Elbow Method and Silhouette Analysis with Yellowbrick and Scikit-Learn

Εισαγωγή

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

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

Αν θέλετε να διαβάσετε έναν αναλυτικό οδηγό για το K-Means Clustering, ρίξτε μια ματιά στο "K-Means Clustering with Scikit-Learn".

Μέθοδος αγκώνα και ανάλυση σιλουέτας

Οι πιο συχνά χρησιμοποιούμενες τεχνικές για την επιλογή του αριθμού των K είναι οι Μέθοδος αγκώνα και την Ανάλυση Σιλουέτας.

Για να διευκολυνθεί η επιλογή των Κς, το Κίτρινο τούβλο Η βιβλιοθήκη ολοκληρώνει τον κώδικα με βρόχους for και μια γραφική παράσταση που συνήθως γράφαμε σε 4 γραμμές κώδικα.

Για να εγκαταστήσετε το Yellowbrick απευθείας από ένα σημειωματάριο Jupyter, εκτελέστε:

! pip install yellowbrick

Ας δούμε πώς λειτουργεί για ένα οικείο σύνολο δεδομένων που είναι ήδη μέρος του Scikit-learn, το ίρις σύνολο δεδομένων

Το πρώτο βήμα είναι η εισαγωγή του συνόλου δεδομένων, KMeans και yellowbrick βιβλιοθήκες και φορτώστε τα δεδομένα:

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer

iris = load_iris()

Παρατηρήστε εδώ, εισάγουμε το KElbowVisualizer και SilhouetteVisualizer από yellowbrick.cluster, αυτές είναι οι ενότητες που θα χρησιμοποιήσουμε για να οπτικοποιήσουμε τα αποτελέσματα των Elbow και Silhouette!

Μετά τη φόρτωση του συνόλου δεδομένων, στο data κλειδί της δέσμης (ένας τύπος δεδομένων που είναι επέκταση ενός λεξικού) είναι οι τιμές των σημείων που θέλουμε να ομαδοποιήσουμε. Αν θέλετε να μάθετε τι αντιπροσωπεύουν οι αριθμοί, ρίξτε μια ματιά iris['feature_names'].

Είναι γνωστό ότι το σύνολο δεδομένων Iris περιέχει τρεις τύπους ίριδων: 'versicolor', 'virginica' και 'setosa'. Μπορείτε επίσης να επιθεωρήσετε τις τάξεις μέσα iris['target_names'] επιβεβαιώνω.

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

Αρχικά, θα επιλέξουμε τις τιμές χαρακτηριστικών:

print(iris['feature_names']) 
print(iris['target_names']) 

X = iris['data']

Στη συνέχεια, μπορούμε να δημιουργήσουμε ένα KMeans μοντέλο, α KElbowVisualizer() παράδειγμα που θα λάβει αυτό το μοντέλο μαζί με τον αριθμό των ks για τα οποία θα υπολογιστεί μια μέτρηση, σε αυτήν την περίπτωση από από 2 έως 11 Ks.

Μετά από αυτό, προσαρμόζουμε τον οπτικοποιητή με τα δεδομένα χρησιμοποιώντας fit() και εμφανίστε την πλοκή με show(). Εάν δεν έχει καθοριστεί μια μέτρηση, ο οπτικοποιητής χρησιμοποιεί το παραμόρφωση μετρική, η οποία υπολογίζει το άθροισμα των τετραγώνων αποστάσεων από κάθε σημείο στο εκχωρημένο κέντρο του:

model = KMeans(random_state=42)

elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)    
elb_visualizer.show()  

Τώρα, έχουμε ήδη ένα Distortion Score Elbow για KMeans Clustering οικόπεδο με κάθετη γραμμή που θα ήταν ο καλύτερος αριθμός ks, σε αυτήν την περίπτωση, 4.

Φαίνεται ότι η Μέθοδος Elbow με μέτρηση παραμόρφωσης δεν ήταν η καλύτερη επιλογή αν δεν γνωρίζαμε τον πραγματικό αριθμό των συμπλεγμάτων. Το Silhouette θα υποδεικνύει επίσης ότι υπάρχουν 4 συστάδες; Για να απαντήσουμε σε αυτό, πρέπει απλώς να επαναλάβουμε τον τελευταίο κώδικα με ένα μοντέλο με 4 συμπλέγματα και ένα διαφορετικό αντικείμενο οπτικοποίησης:

model_4clust = KMeans(n_clusters = 4, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

σκορ σιλουέτα για k σημαίνει σύμπλεγμα χρησιμοποιώντας τη μέθοδο αγκώνα

Ο κωδικός εμφανίζει α Silhouette Plot of KMeans Clustering για 150 δείγματα σε 4 κέντρα. Για να αναλύσουμε αυτά τα συμπλέγματα, πρέπει να δούμε την τιμή του συντελεστή σιλουέτας (ή βαθμολογία), η καλύτερη τιμή του είναι πιο κοντά στο 1. Η μέση τιμή που έχουμε είναι 0.5, που σημειώνεται από την κάθετη γραμμή, και όχι τόσο καλό.

Πρέπει επίσης να εξετάσουμε την κατανομή μεταξύ των συστάδων – ένα καλό οικόπεδο έχει παρόμοια μεγέθη ομαδοποιημένων περιοχών ή καλά κατανεμημένα σημεία. Σε αυτό το γράφημα, υπάρχουν 3 μικρότερα συμπλέγματα (αριθμός 3, 2, 1) και ένα μεγαλύτερο σύμπλεγμα (αριθμός 0), το οποίο δεν είναι το αποτέλεσμα που περιμέναμε.

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

Ας επαναλάβουμε την ίδια γραφική παράσταση για 3 ομάδες για να δούμε τι συμβαίνει:

model_3clust = KMeans(n_clusters = 3, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

σιλουέτα για τα συμπλέγματα kmeans

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

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

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

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