Clustering mit Dirichlet Process Mixture Model in Java PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Clustering mit Dirichlet Process Mixture Model in Java

In den vorherigen Artikeln haben wir die Dirichlet-Prozessmischungsmodelle und wie sie in der Clusteranalyse verwendet werden können. In diesem Artikel werden wir eine Java-Implementierung von vorstellen zwei verschiedene DPMM-Modelle: das Dirichlet Multivariate Normal Mixture Model, das zum Clustering von Gaußschen Daten verwendet werden kann, und das Dirichlet Multinomial Mixture Model, das zum Clustering von Dokumenten verwendet wird. Der Java-Code ist Open-Source unter der GPL v3-Lizenz und kann kostenlos von heruntergeladen werden Github.

Update: Das Datumbox Machine Learning Framework ist jetzt Open Source und kostenlos für herunterladen. Schauen Sie sich das Paket com.datumbox.framework.machinelearning.clustering an, um die Implementierung von Dirichlet Process Mixture Models in Java zu sehen.

Implementierung des Dirichlet Process Mixture Model in Java

Der Code implementiert das Dirichlet Process Mixture Model mit Gibbs Sampler und verwendet Apache Commons Math 3.3 als Matrixbibliothek. Es ist unter GPLv3 lizenziert. Sie können es also verwenden, ändern und frei weitergeben. Sie können die Java-Implementierung von herunterladen Github. Beachten Sie, dass Sie alle theoretischen Teile der Clustering-Methode in den vorherigen 5 Artikeln sowie detaillierte Javadoc-Kommentare zur Implementierung im Quellcode finden.

Nachfolgend finden Sie eine allgemeine Beschreibung des Codes:

1. DPMM-Klasse

Das DPMM ist eine abstrakte Klasse und fungiert als Basis für die verschiedenen Modelle, implementiert das Chinesischer Restaurantprozess und enthält die Eingeklappter Gibbs-Sampler. Es verfügt über die öffentliche Methode cluster (), die das Dataset als Punkteliste empfängt und für die Durchführung der Clusteranalyse verantwortlich ist. Andere nützliche Methoden der Klasse sind getPointAssignments (), mit denen die Clusterzuweisungen nach Abschluss des Clustering abgerufen werden, und getClusterList (), mit dem die Liste der identifizierten Cluster abgerufen wird. Das DPMM enthält die statisch verschachtelte abstrakte Klasse Cluster. Es enthält mehrere abstrakte Methoden zur Verwaltung der Punkte und zur Schätzung des hinteren PDF-Dokuments, die zur Schätzung der Clusterzuordnungen verwendet werden.

2. Gaußsche DPMM-Klasse

Das Gaußsche DPMM ist die Implementierung des Dirichlet Multivariate Normal Mixture Model und erweitert die DPMM-Klasse. Es enthält alle Methoden, die zur Schätzung der Wahrscheinlichkeiten unter der Gaußschen Annahme erforderlich sind. Darüber hinaus enthält es die statisch verschachtelte Klasse Cluster, die alle abstrakten Methoden der DPMM.Cluster-Klasse implementiert.

3. MultinomialDPMM-Klasse

Das MultinomialDPMM implementiert das Dirichlet-Multinomial Mixture Model und erweitert die DPMM-Klasse. Ähnlich wie die GaussianDPMM-Klasse enthält sie alle Methoden, die zum Schätzen der Wahrscheinlichkeiten unter der Multinomial-Dirichlet-Annahme erforderlich sind, und enthält den statisch verschachtelten Klassencluster, der die abstrakten Methoden von DPMM.Cluster implementiert.

4. SRS-Klasse

Die SRS-Klasse wird verwendet, um eine einfache Zufallsabtastung aus einer Häufigkeitstabelle durchzuführen. Es wird vom Gibbs-Sampler verwendet, um die neuen Clusterzuweisungen in jedem Schritt des iterativen Prozesses zu schätzen.

5. Punktklasse

Die Point-Klasse dient als Tupel, in dem die Daten des Datensatzes zusammen mit seiner ID gespeichert werden.

6. Apache Commons Math Lib

Die Apache Commons Math 3.3 lib wird für Matrixmultiplikationen verwendet und ist die einzige Abhängigkeit unserer Implementierung.

7. DPMME-Beispielklasse

Diese Klasse enthält Beispiele für die Verwendung der Java-Implementierung.

Verwenden der Java-Implementierung

Der Benutzer des Codes kann alle Parameter der Mischungsmodelle konfigurieren, einschließlich der Modelltypen und der Hyperparameter. Im folgenden Codeausschnitt können wir sehen, wie der Algorithmus initialisiert und ausgeführt wird:

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

Unten sehen wir die Ergebnisse der Ausführung des Algorithmus für einen synthetischen Datensatz, der aus 300 Datenpunkten besteht. Die Punkte wurden ursprünglich durch 3 verschiedene Verteilungen erzeugt: N ([10,50], I), N ([50,10], I) und N ([150,100], I).

Streudiagramm1
Abbildung 1: Streudiagramm des Demo-Datensatzes

Der Algorithmus identifizierte nach 10 Iterationen die folgenden 3 Cluster-Zentren: [10.17, 50.11], [49.99, 10.13] und [149.97, 99.81]. Da wir schließlich alles auf Bayes'sche Weise behandeln, können wir nicht nur Einzelpunktschätzungen der Clusterzentren, sondern auch deren Wahrscheinlichkeitsverteilung mithilfe der Formel Gleichung.

Scatterplot2-Heatmap
Abbildung 2: Streudiagramm der Wahrscheinlichkeiten der Clusterzentren

In der obigen Abbildung zeichnen wir diese Wahrscheinlichkeiten auf. Die roten Bereiche zeigen eine hohe Wahrscheinlichkeit an, das Zentrum eines Clusters zu sein, und die schwarzen Bereiche zeigen eine niedrige Wahrscheinlichkeit an.

Um die Java-Implementierung in realen Anwendungen zu verwenden, müssen Sie externen Code schreiben, der Ihr ursprüngliches Dataset in das erforderliche Format konvertiert. Darüber hinaus ist möglicherweise zusätzlicher Code erforderlich, wenn Sie die Ausgabe wie oben dargestellt visualisieren möchten. Beachten Sie schließlich, dass die Apache Commons Math-Bibliothek im Projekt enthalten ist und daher keine zusätzliche Konfiguration erforderlich ist, um die Demos auszuführen.

Wenn Sie die Implementierung in einem interessanten Projekt verwenden, schreiben Sie uns eine Nachricht und wir werden Ihr Projekt in unserem Blog veröffentlichen. Auch wenn Ihnen der Artikel gefällt, nehmen Sie sich bitte einen Moment Zeit und teilen Sie ihn auf Twitter oder Facebook.

Zeitstempel:

Mehr von Bezugsbox