Ομαδοποίηση με Μοντέλο Μείγματος Διεργασιών Dirichlet στο Java PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Ομαδοποίηση με το μοντέλο του μείγματος διεργασιών Dirichlet στη Java

Στα προηγούμενα άρθρα συζητήσαμε λεπτομερώς το Μοντέλα Μείγματος Διεργασίας Dirichlet και πώς μπορούν να χρησιμοποιηθούν στην ανάλυση συστάδων. Σε αυτό το άρθρο θα παρουσιάσουμε μια υλοποίηση Java του δύο διαφορετικά μοντέλα DPMM. Ο κώδικας Java είναι ανοιχτού κώδικα με άδεια GPL v3 και μπορεί να ληφθεί ελεύθερα από Github.

Ενημέρωση: Το Datumbox Machine Learning Framework είναι τώρα ανοιχτού κώδικα και δωρεάν κατεβάσετε. Ρίξτε μια ματιά στο πακέτο com.datumbox.framework.machinelearning.clustering για να δείτε την υλοποίηση Dirichlet Process Mixture Models στην Java.

Εφαρμογή μοντέλου μιγμάτων διεργασιών Dirichlet σε Java

Ο κώδικας υλοποιεί το μοντέλο διεργασίας Dirichlet Mixture με Gibbs Sampler και χρησιμοποιεί το Apache Commons Math 3.3 ως βιβλιοθήκη μητρών. Έχει άδεια χρήσης σύμφωνα με το GPLv3, γι' αυτό μη διστάσετε να το χρησιμοποιήσετε, να το τροποποιήσετε και να το αναδιανείμετε ελεύθερα και μπορείτε να κάνετε λήψη της εφαρμογής Java από Github. Σημειώστε ότι μπορείτε να βρείτε όλα τα θεωρητικά μέρη της μεθόδου ομαδοποίησης στα προηγούμενα 5 άρθρα και αναλυτικά σχόλια Javadoc για εφαρμογή στον πηγαίο κώδικα.

Παρακάτω παραθέτουμε μια περιγραφή υψηλού επιπέδου στον κώδικα:

1. Κατηγορία DPMM

Το DPMM είναι μια αφηρημένη κλάση και λειτουργεί ως βάση για τα διάφορα διαφορετικά μοντέλα, υλοποιεί το Διαδικασία κινέζικου εστιατορίου και περιέχει το Συμπτυγμένο δείγμα Gibbs. Έχει τη δημόσια μέθοδο cluster() που λαμβάνει το σύνολο δεδομένων ως Λίστα σημείων και είναι υπεύθυνο για την εκτέλεση της ανάλυσης συμπλέγματος. Άλλες χρήσιμες μέθοδοι της κλάσης είναι η getPointAssignments() που χρησιμοποιείται για την ανάκτηση των αναθέσεων συμπλέγματος μετά την ολοκλήρωση της ομαδοποίησης και η getClusterList() που χρησιμοποιείται για τη λήψη της λίστας με τα αναγνωρισμένα συμπλέγματα. Το DPMM περιέχει τη στατική ένθετη αφηρημένη κλάση Cluster. περιέχει αρκετές αφηρημένες μεθόδους που αφορούν τη διαχείριση των σημείων και την εκτίμηση του μεταγενέστερου pdf που χρησιμοποιούνται για την εκτίμηση των αναθέσεων συστάδων.

2. Κατηγορία GaussianDPMM

Το GaussianDPMM είναι η υλοποίηση του πολυμεταβλητού μοντέλου κανονικού μείγματος Dirichlet και επεκτείνει την κλάση DPMM. Περιλαμβάνει όλες τις μεθόδους που απαιτούνται για την εκτίμηση των πιθανοτήτων σύμφωνα με την υπόθεση Gauss. Επιπλέον περιέχει τη στατική ένθετη κλάση Cluster που υλοποιεί όλες τις αφηρημένες μεθόδους της κλάσης DPMM.Cluster.

3. Πολυωνυμική κλάση DPMM

Το Πολυωνυμικό DPMM υλοποιεί το μοντέλο Dirichlet-Πολυωνυμικό Μείγμα και επεκτείνει την κλάση DPMM. Ομοίως με την κλάση GaussianDPMM , περιέχει όλες τις μεθόδους που απαιτούνται για την εκτίμηση των πιθανοτήτων σύμφωνα με την υπόθεση Multinomial-Dirichlet και περιέχει τη στατική ένθετη κλάση Cluster που υλοποιεί τις αφηρημένες μεθόδους του DPMM.Cluster.

4. Τάξη SRS

Η κλάση SRS χρησιμοποιείται για την εκτέλεση απλής τυχαίας δειγματοληψίας από έναν πίνακα συχνοτήτων. Χρησιμοποιείται από το Gibbs Sampler για να εκτιμήσει τις νέες εκχωρήσεις συμπλέγματος σε κάθε βήμα της επαναληπτικής διαδικασίας.

5. Κατηγορία σημείων

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

6. Apache Commons Math Lib

Το Apache Commons Math 3.3 lib χρησιμοποιείται για πολλαπλασιασμούς Matrix και είναι η μόνη εξάρτηση της υλοποίησής μας.

7. Παράδειγμα κλάσης DPMME

Αυτή η κλάση περιέχει παραδείγματα για τον τρόπο χρήσης της υλοποίησης Java.

Χρησιμοποιώντας την υλοποίηση Java

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

List<Point> pointList = new ArrayList<>();
//add records in pointList

//Dirichlet Process parameter
Integer dimensionality = 2;
double alpha = 1.0;

//Hyper parameters of Base Function
int kappa0 = 0;
int nu0 = 1;
RealVector mu0 = new ArrayRealVector(new double[]{0.0, 0.0});
RealMatrix psi0 = new BlockRealMatrix(new double[][]{{1.0,0.0},{0.0,1.0}});

//Create a DPMM object
DPMM dpmm = new GaussianDPMM(dimensionality, alpha, kappa0, nu0, mu0, psi0);

int maxIterations = 100;
int performedIterations = dpmm.cluster(pointList, maxIterations);

//get a list with the point ids and their assignments
Map<Integer, Integer> zi = dpmm.getPointAssignments();

Παρακάτω μπορούμε να δούμε τα αποτελέσματα της εκτέλεσης του αλγορίθμου σε ένα συνθετικό σύνολο δεδομένων που αποτελείται από 300 σημεία δεδομένων. Τα σημεία δημιουργήθηκαν αρχικά από 3 διαφορετικές κατανομές: N([10,50], I), N([50,10], I) και N([150,100], I).

scatterplot1
Εικόνα 1: Γράφημα διασποράς του συνόλου δεδομένων επίδειξης

Ο αλγόριθμος αφού εκτελέστηκε για 10 επαναλήψεις, εντόπισε τα ακόλουθα 3 κέντρα συμπλέγματος: [10.17, 50.11], [49.99, 10.13] και [149.97, 99.81]. Τέλος, δεδομένου ότι αντιμετωπίζουμε τα πάντα με τρόπο Bayesian, είμαστε σε θέση όχι μόνο να παρέχουμε εκτιμήσεις μεμονωμένων σημείων των κέντρων συστάδων αλλά και την κατανομή πιθανοτήτων τους χρησιμοποιώντας το τύπος εξίσωση.

scatterplot2-heatmap
Σχήμα 2: Διάγραμμα διασποράς των πιθανοτήτων των κέντρων των συστάδων

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

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

Εάν χρησιμοποιείτε την υλοποίηση σε ένα ενδιαφέρον έργο, στείλτε μας μια γραμμή και θα παρουσιάσουμε το έργο σας στο ιστολόγιό μας. Επίσης, αν σας αρέσει το άρθρο, αφιερώστε λίγο χρόνο και μοιραστείτε το στο Twitter ή το Facebook.

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

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