Ιεραρχικός αλγόριθμος ομαδοποίησης Python!

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

Αυτό το άρθρο δημοσιεύθηκε ως μέρος του Επιστήμη δεδομένων Blogathon

Εισαγωγή

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

Εδώ χρησιμοποιούμε την Python για να εξηγήσουμε το Μοντέλο Ιεραρχικής Ομαδοποίησης. Έχουμε 200 δεδομένα πελατών εμπορικών κέντρων στο σύνολο δεδομένων μας. Το αναγνωριστικό πελάτη, το είδος, η ηλικία, το ετήσιο εισόδημα και η βαθμολογία δαπανών κάθε πελάτη περιλαμβάνονται στο πλαίσιο δεδομένων. Το ποσό που υπολογίζεται για κάθε βαθμολογία δαπανών των πελατών τους βασίζεται σε διάφορα κριτήρια, όπως το εισόδημά τους, τον αριθμό των φορών την εβδομάδα που επισκέπτονται το εμπορικό κέντρο και το ποσό των χρημάτων που ξόδεψαν σε ένα χρόνο. Αυτή η βαθμολογία κυμαίνεται από 1 έως 100. Επειδή δεν γνωρίζουμε τις απαντήσεις, ένα επιχειρηματικό πρόβλημα γίνεται πρόβλημα ομαδοποίησης. Οι τελικές κατηγορίες των δεδομένων είναι άγνωστες σε εμάς. Ως αποτέλεσμα, ο στόχος μας είναι να ανακαλύψουμε ορισμένες άγνωστες ομάδες πελατών.

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

Σημαντικοί Όροι στην Ιεραρχική Ομαδοποίηση

Μέθοδοι Σύνδεσης

Εάν υπάρχουν (α) αρχικές παρατηρήσεις a[0],…,a[|a|1] στο σύμπλεγμα (a) και (β) αρχικά αντικείμενα b[0],…,b[|b|1] στο σύμπλεγμα ( β), τότε πρέπει να υπολογίσουμε την απόσταση μεταξύ δύο συστάδων (α) και (β) για να τα συνδυάσουμε (β). Ας υποθέσουμε ότι υπάρχει ένα σημείο (δ) που δεν έχει εκχωρηθεί σε κανένα από τα συμπλέγματα. Θα χρειαστεί να καταλάβουμε πόσο απέχει το σύμπλεγμα (a) από το σύμπλεγμα (d) και το σύμπλεγμα (b) από το σύμπλεγμα (d).

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

Ενιαία Σύνδεση — Οι αποστάσεις μεταξύ των πιο όμοιων μελών υπολογίζονται για κάθε ζεύγος συστάδων και στη συνέχεια τα συμπλέγματα συγχωνεύονται με βάση τη μικρότερη απόσταση.

Μέση Σύνδεση — Υπολογίζεται η απόσταση μεταξύ όλων των μελών μιας συστάδας και όλων των μελών μιας άλλης συστάδας. Μετά από αυτό, ο μέσος όρος αυτών των αποστάσεων χρησιμοποιείται για να καθοριστεί ποια συμπλέγματα θα συγχωνευθούν.

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

Διάμεσος Σύνδεσμος — Χρησιμοποιούμε τη διάμεση απόσταση αντί για τη μέση απόσταση με παρόμοιο τρόπο με τη μέση σύνδεση.

Σύνδεση θαλάμου — Καθορίζει την απόσταση μεταξύ των συστάδων χρησιμοποιώντας τη μέθοδο ανάλυσης διασποράς.

Centroid Linkage — Το κέντρο κάθε συστάδας υπολογίζεται με τον μέσο όρο όλων των σημείων που έχουν εκχωρηθεί στο σύμπλεγμα και η απόσταση μεταξύ των συστάδων υπολογίζεται στη συνέχεια χρησιμοποιώντας αυτό το κέντρο.

Υπολογισμός απόστασης

Υπάρχουν πολλές προσεγγίσεις για τον υπολογισμό της απόστασης μεταξύ δύο ή περισσότερων συστάδων, με την Ευκλείδεια Απόσταση να είναι η πιο δημοφιλής. Άλλες μετρήσεις απόστασης, όπως Minkowski, City Block, Hamming, Jaccard και Chebyshev, μπορούν επίσης να χρησιμοποιηθούν με την ιεραρχική ομαδοποίηση. Διαφορετικές μετρήσεις απόστασης έχουν αντίκτυπο στην ιεραρχική ομαδοποίηση, όπως φαίνεται στο Σχήμα 2.

υπολογισμός απόστασης

Δενδρογράφημα

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

Παράδειγμα

Τώρα εξετάζουμε παραδείγματα χρησιμοποιώντας Python για να επιδείξουμε το Μοντέλο Ιεραρχικής Ομαδοποίησης. Διαθέτουμε δεδομένα 200 πελατών εμπορικών κέντρων σύνολο δεδομένων. Το αναγνωριστικό πελάτη, το είδος, η ηλικία, το ετήσιο εισόδημα και η βαθμολογία δαπανών κάθε πελάτη περιλαμβάνονται στο πλαίσιο δεδομένων. Το ποσό που υπολογίζεται για κάθε βαθμολογία δαπανών των πελατών τους βασίζεται σε διάφορα κριτήρια, όπως το εισόδημά τους, τον αριθμό των φορών την εβδομάδα που επισκέπτονται το εμπορικό κέντρο και τα χρήματα που ξόδεψαν για ένα χρόνο. Αυτή η βαθμολογία κυμαίνεται από 1 έως 100. Επειδή δεν γνωρίζουμε τις απαντήσεις, ένα επιχειρηματικό πρόβλημα γίνεται πρόβλημα ομαδοποίησης.

#1 Εισαγωγή των βιβλιοθηκών
εισαγωγή numpy ως np εισαγωγή matplotlib.pyplot ως plt εισαγωγή panda ως pd
#2 Εισαγωγή του συνόλου δεδομένων Mall_Customers από πάντα
σύνολο δεδομένων = pd.read_csv('Mall_Customers.csv') X = dataset.iloc[:, [3,4]].values

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

#3 Χρησιμοποιώντας το δενδρογράφημα για να βρείτε τους βέλτιστους αριθμούς συστάδων. # Το πρώτο πράγμα που θα κάνουμε είναι να εισαγάγουμε τη βιβλιοθήκη scipy. Το scipy είναι μια βιβλιοθήκη ανοιχτού κώδικα # Python που περιέχει εργαλεία για την ιεραρχική ομαδοποίηση και τη δημιουργία δενδρογραμμάτων. # Εισαγάγετε μόνο το απαραίτητο εργαλείο. εισαγωγή scipy.cluster.hierarchy as sch 
Το #Lets create a nukndrogram variable # linkage είναι στην πραγματικότητα ο ίδιος ο αλγόριθμος της ιεραρχικής ομαδοποίησης και στη συνέχεια στο #linkage πρέπει να προσδιορίσουμε σε ποια δεδομένα εφαρμόζουμε και δεσμεύουμε. Αυτό είναι X δενδρόγραμμα δεδομένων = sch.dendrogram(sch.linkage(X, μέθοδος = "θάλαμος")) plt.title('Δενδρογράφημα') plt.xlabel('Πελάτες') plt.ylabel('Ευκλείδειες αποστάσεις') plt. προβολή()

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

δενδογράφημα

Οι πελάτες αντιπροσωπεύονται στον άξονα x και η Ευκλείδεια απόσταση μεταξύ των συστάδων αναπαρίσταται στον άξονα y. Πώς υπολογίζουμε τον καλύτερο αριθμό συστάδων με βάση αυτό το διάγραμμα; Θέλουμε να βρούμε τη μεγαλύτερη κατακόρυφη απόσταση που μπορούμε χωρίς να διασχίσουμε καμία οριζόντια γραμμή, η οποία είναι η γραμμή με κόκκινο πλαίσιο στο παραπάνω διάγραμμα. Ας μετρήσουμε τις γραμμές στο διάγραμμα και ας υπολογίσουμε πόσα συμπλέγματα είναι τα καλύτερα. Για αυτό το σύνολο δεδομένων, ο αριθμός συμπλέγματος θα είναι 5.

#4 Προσαρμογή ιεραρχικής ομαδοποίησης στο σύνολο δεδομένων Mall_Customes # Υπάρχουν δύο αλγόριθμοι για ιεραρχική ομαδοποίηση: Συγκεντρωτική Ιεραρχική Ομαδοποίηση και # Διαιρετική Ιεραρχική Ομαδοποίηση. Επιλέγουμε τη μέθοδο Ευκλείδειας απόστασης και πτέρυγας για την κλάση # αλγορίθμων μας από την εισαγωγή sklearn.cluster AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'ευκλείδειος', σύνδεση ='ward') # Ας προσπαθήσουμε να προσαρμόσουμε το ιεραρχικό σύνολο δεδομένων του Xgorithm ενώ δημιουργείται το διάνυσμα # clusters που λέει για κάθε πελάτη σε ποιο σύμπλεγμα ανήκει ο πελάτης. y_hc=hc.fit_predict(X)
#5 Οπτικοποίηση των συστάδων. Αυτός ο κώδικας είναι παρόμοιος με τον κώδικα οπτικοποίησης k-means. #Αντικαθιστούμε μόνο το όνομα του διανύσματος y_kmeans σε y_hc για την ιεραρχική ομαδοποίηση plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='red', label = 'Σύμπλεγμα 1') plt.scatter(X[y_hc==1, 0], X[y_hc==1, 1], s=100, c='blue', label ='Cluster 2') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='green', label ='Cluster 3') plt.scatter(X[y_hc==3, 0] , X[y_hc==3, 1], s=100, c='cyan', label ='Cluster 4') plt.scatter(X[y_hc==4, 0], X[y_hc==4, 1 ], s=100, c='magenta', label ='Cluster 5') plt.title('Clusters of Customers (Hierarchical Clustering Model)') plt.xlabel('Ennual Income(k$)') plt.ylabel ('Spending Score(1-100') plt.show()
συστάδες | Ιεραρχική Ομαδοποίηση
Cluster1 (Κόκκινο), Cluster2 (Μπλε), Cluster3 (Πράσινο), Cluster4 (Κυανό), Cluster5 (Ματζέντα)

Αυτά τα clusters μπορούν να θεωρηθούν ως το τμήμα πελατών του εμπορικού κέντρου.

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

Συμπέρασμα

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

Τέλος

Ευχαριστούμε που το διαβάσατε!
Ελπίζω να σας άρεσε το άρθρο και να αυξήσετε τις γνώσεις σας.
Παρακαλώ μη διστάσετε να επικοινωνήσετε μαζί μου on Ηλεκτρονική Διεύθυνση (Email)
Κάτι που δεν αναφέρεται ή θέλετε να μοιραστείτε τις σκέψεις σας; Μην διστάσετε να σχολιάσετε παρακάτω και θα επικοινωνήσω μαζί σας.

Σχετικά με το Συγγραφέας

Hardikkumar M. Dhaduk
Αναλυτής Δεδομένων | Ειδικός Ψηφιακής Ανάλυσης Δεδομένων | Εκπαιδευτής Επιστήμης Δεδομένων
Συνδεθείτε μαζί μου linkedin
Συνδεθείτε μαζί μου Github

Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του Συντάκτη.

Πηγή: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

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

Περισσότερα από Ανάλυση Vidhya