Clustering con il modello di miscela di processi Dirichlet in Java PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Clustering con Dirichlet Process Mixture Model in Java

Negli articoli precedenti abbiamo discusso in dettaglio il Modelli di miscela di processo Dirichlet e come possono essere utilizzati nell'analisi dei cluster. In questo articolo presenteremo un'implementazione Java di due diversi modelli DPMM: il modello di miscela normale multivariata di Dirichlet che può essere utilizzato per raggruppare i dati gaussiani e il modello di miscela multichomiale di Dirichlet utilizzato per raggruppare i documenti. Il codice Java è open source con licenza GPL v3 e può essere scaricato liberamente da Github.

Aggiornamento: Datumbox Machine Learning Framework è ora open-source e gratuito scaricare. Dai un'occhiata al pacchetto com.datumbox.framework.machinelearning.clustering per vedere l'implementazione dei modelli di miscela di processo di Dirichlet in Java.

Implementazione di Dirichlet Process Mixture Model in Java

Il codice implementa il modello di miscela di processo di Dirichlet con Gibbs Sampler e utilizza Apache Commons Math 3.3 come libreria di matrici. È concesso in licenza in GPLv3, quindi sentiti libero di usarlo, modificarlo e ridistribuirlo liberamente e puoi scaricare l'implementazione Java da Github. Nota che puoi trovare tutte le parti teoriche del metodo di clustering nei precedenti 5 articoli e commenti dettagliati su Javadoc per l'implementazione nel codice sorgente.

Di seguito elenchiamo una descrizione di alto livello sul codice:

1. Classe DPMM

Il DPMM è una classe astratta e funge da base per i diversi modelli, implementa il Processo di ristorante cinese e contiene il file Campionatore Gibbs compresso. Ha il metodo pubblico cluster () che riceve il set di dati come un elenco di punti ed è responsabile dell'esecuzione dell'analisi del cluster. Altri metodi utili della classe sono getPointAssignments () che viene utilizzato per recuperare le assegnazioni dei cluster una volta completato il clustering e getClusterList () che viene utilizzato per ottenere l'elenco dei cluster identificati. Il DPMM contiene la classe astratta annidata statica Cluster; contiene diversi metodi astratti riguardanti la gestione dei punti e la stima del pdf posteriore che vengono utilizzati per la stima degli incarichi di cluster.

2. Classe GaussianDPMM

GaussianDPMM è l'implementazione di Dirichlet Multivariate Normal Mixture Model ed estende la classe DPMM. Contiene tutti i metodi necessari per stimare le probabilità secondo il presupposto gaussiano. Inoltre contiene la classe nidificata statica Cluster che implementa tutti i metodi astratti della classe DPMM.Cluster.

3. Classe MultinomialDPMM

MultinomialDPMM implementa il modello di miscela Dirichlet-Multinomial ed estende la classe DPMM. Analogamente alla classe GaussianDPMM, contiene tutti i metodi necessari per stimare le probabilità in base all'assunto Multinomial-Dirichlet e contiene il cluster statico nidificato di classe che implementa i metodi astratti di DPMM.Cluster.

4. Classe SRS

La classe SRS viene utilizzata per eseguire il campionamento casuale semplice da una tabella di frequenza. Viene utilizzato dal Gibbs Sampler per stimare le nuove assegnazioni di cluster in ogni fase del processo iterativo.

5. Classe dei punti

La classe Point funge da tupla che memorizza i dati del record insieme al suo ID.

6. Apache Commons Math Lib

La libreria Apache Commons Math 3.3 è utilizzata per le moltiplicazioni Matrix ed è l'unica dipendenza della nostra implementazione.

7. Classe DPMMExample

Questa classe contiene esempi su come utilizzare l'implementazione Java.

Utilizzo dell'implementazione Java

L'utente del codice è in grado di configurare tutti i parametri dei modelli di miscela, inclusi i tipi di modello e gli iperparametri. Nel seguente frammento di codice possiamo vedere come viene inizializzato ed eseguito l'algoritmo:

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

Di seguito possiamo vedere i risultati dell'esecuzione dell'algoritmo su un set di dati sintetico che consiste di 300 punti dati. I punti sono stati originariamente generati da 3 diverse distribuzioni: N ([10,50], I), N ([50,10], I) e N ([150,100], I).

grafico a dispersione1
Figura 1: grafico a dispersione del set di dati demo

L'algoritmo dopo essere stato eseguito per 10 iterazioni, ha identificato i seguenti 3 centri cluster: [10.17, 50.11], [49.99, 10.13] e [149.97, 99.81]. Infine, poiché trattiamo tutto in modo bayesiano, siamo in grado non solo di fornire stime a singolo punto dei centri del cluster, ma anche la loro distribuzione di probabilità utilizzando formula equazione.

scatterplot2-mappa termica
Figura 2: grafico a dispersione delle probabilità dei centri dei cluster

Nella figura sopra tracciamo quelle probabilità; le aree rosse indicano un'alta probabilità di essere al centro di un ammasso e le aree nere indicano una bassa probabilità.

Per utilizzare l'implementazione Java nelle applicazioni del mondo reale è necessario scrivere il codice esterno che converte il set di dati originale nel formato richiesto. Inoltre potrebbe essere necessario un codice aggiuntivo se si desidera visualizzare l'output come si vede sopra. Infine, nota che la libreria matematica di Apache Commons è inclusa nel progetto e quindi non è necessaria alcuna configurazione aggiuntiva per eseguire le demo.

Se usi l'implementazione in un progetto interessante, lasciaci una riga e presenteremo il tuo progetto sul nostro blog. Inoltre, se ti piace l'articolo, ti preghiamo di dedicare un momento e condividerlo su Twitter o Facebook.

Timestamp:

Di più da Databox