- Iulie 7, 2014
- Vasilis Vryniotis
- . 1 Comentariu
În articolele anterioare am discutat în detaliu Modele de amestec de proces Dirichlet și cum pot fi utilizate în analiza clusterelor. În acest articol vom prezenta o implementare Java a două modele DPMM diferite: Modelul Dirichlet Multivariate Normal Mixture care poate fi utilizat pentru a grupa date Gaussiene și Modelul Dirichlet-Multinomial Mixture care este folosit pentru gruparea documentelor. Codul Java este open-source sub licență GPL v3 și poate fi descărcat gratuit de la Github.
Actualizare: Datumbox Machine Learning Framework este acum open-source și gratuit Descarca. Consultați pachetul com.datumbox.framework.machinelearning.clustering pentru a vedea implementarea modelelor Dirichlet Process Mixture în Java.
Implementarea Dirichlet Process Mixture Model în Java
Codul implementează modelul Dirichlet Process Mixture Model cu Gibbs Sampler și folosește Apache Commons Math 3.3 ca bibliotecă matricială. Este licențiat sub GPLv3, așa că nu ezitați să îl utilizați, să îl modificați și să îl redistribuiți liber și puteți descărca implementarea Java de pe Github. Rețineți că puteți găsi toate părțile teoretice ale metodei de grupare în cele 5 articole anterioare și comentariile Javadoc detaliate pentru implementare în codul sursă.
Mai jos listăm o descriere de nivel înalt a codului:
1. Clasa DPMM
DPMM este o clasă abstractă și acționează ca o bază pentru diferitele modele diferite, implementează Procesul restaurantului chinezesc și conține Sampler Gibbs prăbușit. Are metoda publică cluster () care primește setul de date ca Listă de puncte și este responsabilă pentru efectuarea analizei clusterului. Alte metode utile ale clasei sunt getPointAssignments (), care este utilizat pentru a prelua atribuțiile de cluster după finalizarea clusterizării și getClusterList (), care este utilizat pentru a obține lista clusterelor identificate. DPMM conține clasa abstractă imbricată statică Cluster; conține mai multe metode abstracte privind gestionarea punctelor și estimarea pdf-ului posterior care sunt utilizate pentru estimarea atribuirilor cluster.
2. Clasa GaussianDPMM
GaussianDPMM este implementarea modelului Dirichlet Multivariate Normal Mixture Model și extinde clasa DPMM. Conține toate metodele care sunt necesare pentru a estima probabilitățile sub ipoteza Gaussiană. Mai mult, conține clasa statică imbricată Cluster care implementează toate metodele abstracte ale clasei DPMM.Cluster.
3. Clasa MultinomialDPMM
MultinomialDPMM implementează modelul Dirichlet-Multinomial Mixture și extinde clasa DPMM. În mod similar cu clasa GaussianDPMM, conține toate metodele care sunt necesare pentru a estima probabilitățile în ipoteza Multinomial-Dirichlet și conține clasa statică imbricată Cluster care implementează metodele abstracte ale DPMM.Cluster.
4. Clasa SRS
Clasa SRS este utilizată pentru efectuarea eșantionării simple aleatorii dintr-un tabel de frecvențe. Este folosit de Gibbs Sampler pentru a estima noile atribuiri de cluster în fiecare etapă a procesului iterativ.
5. Clasa punctelor
Clasa Point servește ca un tuplu care stochează datele înregistrării împreună cu id-ul său.
6. Apache Commons Math Lib
Apache Commons Math 3.3 lib este utilizat pentru multiplicările Matrix și este singura dependență a implementării noastre.
7. Clasa DPMMExample
Această clasă conține exemple de utilizare a implementării Java.
Folosind implementarea Java
Utilizatorul codului poate configura toți parametrii modelelor de amestec, inclusiv tipurile de model și hiperparametrele. În următorul fragment de cod putem vedea cum este inițializat și executat algoritmul:
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();
Mai jos putem vedea rezultatele executării algoritmului pe un set de date sintetic care constă din 300 de puncte de date. Punctele au fost generate inițial de 3 distribuții diferite: N ([10,50], I), N ([50,10], I) și N ([150,100], I).
Figura 1: Scatter Plot a setului de date demo
Algoritmul după ce a rulat pentru 10 iterații, a identificat următoarele 3 centre cluster: [10.17, 50.11], [49.99, 10.13] și [149.97, 99.81]. În cele din urmă, deoarece tratăm totul într-o manieră bayesiană, suntem capabili nu numai să furnizăm estimări punctuale unice ale centrelor cluster, dar și distribuția probabilității lor utilizând formulă .
Figura 2: Graficul Scatter al probabilităților centrelor clusterelor
În figura de mai sus trasăm acele probabilități; zonele roșii indică o probabilitate mare de a fi centrul unui cluster, iar zonele negre indică o probabilitate scăzută.
Pentru a utiliza implementarea Java în aplicații din lumea reală, trebuie să scrieți un cod extern care convertește setul de date original în formatul necesar. Mai mult, ar putea fi necesar un cod suplimentar dacă doriți să vizualizați rezultatul așa cum vedem mai sus. În cele din urmă, rețineți că biblioteca Apache Commons Math este inclusă în proiect și, prin urmare, nu este necesară nicio configurație suplimentară pentru a rula demonstrațiile.
Dacă utilizați implementarea într-un proiect interesant, trimiteți-ne o linie și vom prezenta proiectul dvs. pe blogul nostru. De asemenea, dacă vă place articolul, vă rugăm să luați un moment și să-l distribuiți pe Twitter sau Facebook.
- AI
- ai art
- ai art generator
- ai robot
- inteligență artificială
- certificare de inteligență artificială
- robot cu inteligență artificială
- roboți cu inteligență artificială
- software de inteligență artificială
- blockchain
- conferință blockchain ai
- coingenius
- inteligența artificială conversațională
- criptoconferință ai
- dall-e
- Datumbox
- învățare profundă
- google ai
- masina de învățare
- Învățare automată și statistici
- Plato
- platoul ai
- Informații despre date Platon
- Jocul lui Platon
- PlatoData
- platogaming
- Programare
- scara ai
- sintaxă
- zephyrnet