Klasterdamine Dirichleti protsessisegude mudeliga Java PlatoBlockchain Data Intelligences. Vertikaalne otsing. Ai.

Klasterdamine Dirichleti protsessisegude mudeliga Javas

Eelmistes artiklites käsitlesime üksikasjalikult Dirichleti protsessisegude mudelid ja kuidas neid saab kasutada klasteranalüüsis. Selles artiklis tutvustame Java rakendust kaks erinevat DPMM mudelit: Dirichleti mitme muutujaga normaalsegu mudel, mida saab kasutada Gaussi andmete rühmitamiseks, ja Dirichlet-Multinomial Mixture Model, mida kasutatakse dokumentide rühmitamiseks. Java kood on avatud lähtekoodiga GPL v3 litsentsi alusel ja seda saab tasuta alla laadida aadressilt Github.

Värskendus: Datumboxi masinõppe raamistik on nüüd avatud lähtekoodiga ja tasuta lae alla. Tutvuge paketiga com.datumbox.framework.machinelearning.clustering, et näha Dirichleti protsessisegude mudelite rakendamist Javas.

Dirichleti protsessisegude mudeli juurutamine Javas

Kood rakendab Dirichleti protsessisegude mudelit koos Gibbs Sampleriga ja kasutab maatriksteegina Apache Commons Math 3.3. See on litsentsitud GPLv3 alusel, seega võite seda vabalt kasutada, muuta ja vabalt edasi levitada ning Java-rakenduse saate alla laadida aadressilt Github. Pange tähele, et kõik klastrimeetodi teoreetilised osad leiate eelmisest 5 artiklist ja üksikasjalikud Javadoci kommentaarid juurutamiseks lähtekoodis.

Allpool loetleme koodi kõrgetasemelise kirjelduse:

1. DPMM klass

DPMM on abstraktne klass ja toimib alusena erinevatele erinevatele mudelitele ja rakendustele Hiina restorani protsess ja sisaldab Gibbsi proovivõttur ahenes. Sellel on avalik meetod cluster(), mis võtab andmestiku vastu punktide loendina ja vastutab klastri analüüsi läbiviimise eest. Teised klassi kasulikud meetodid on getPointAssignments(), mida kasutatakse klastri määrangute toomiseks pärast rühmitamise lõpetamist, ja getClusterList(), mida kasutatakse tuvastatud klastrite loendi hankimiseks. DPMM sisaldab staatilist pesastatud abstraktset klassi Cluster; see sisaldab mitmeid abstraktseid meetodeid punktide haldamise ja tagumise pdf-i hindamise kohta, mida kasutatakse klastri ülesannete hindamiseks.

2. GaussianDPMM klass

GaussianDPMM on Dirichleti mitme muutujaga normaalse segu mudeli rakendamine ja laiendab DPMM-klassi. See sisaldab kõiki meetodeid, mis on vajalikud tõenäosuste hindamiseks Gaussi eeldusel. Lisaks sisaldab see staatilist pesastatud klassi Cluster, mis rakendab kõiki klassi DPMM.Cluster abstraktseid meetodeid.

3. MultinomialDPMM klass

MultinomialDPMM rakendab Dirichlet-Multinomial Mixture Model ja laiendab DPMM klassi. Sarnaselt GaussianDPMM klassiga sisaldab see kõiki meetodeid, mis on vajalikud tõenäosuste hindamiseks Multinomial-Dirichleti eeldusel, ja sisaldab staatilist pesastatud klassi Cluster, mis rakendab DPMM.Clusteri abstraktseid meetodeid.

4. SRS klass

SRS-klassi kasutatakse lihtsa juhusliku proovivõtu tegemiseks sagedustabelist. Gibbsi proovivõttur kasutab seda uute klastri määrangute hindamiseks iteratiivse protsessi igas etapis.

5. Punktiklass

Klass Point toimib korteegina, mis salvestab kirje andmed koos selle ID-ga.

6. Apache Commons Math Lib

Apache Commons Math 3.3 lib-i kasutatakse maatriksi korrutamiseks ja see on meie rakenduse ainus sõltuvus.

7. DPMMNäidisklass

See klass sisaldab näiteid Java-rakenduse kasutamise kohta.

Java juurutamise kasutamine

Koodi kasutaja saab seadistada kõiki segumudelite parameetreid, sealhulgas mudelitüüpe ja hüperparameetreid. Järgmises koodilõigul näeme, kuidas algoritm initsialiseeritakse ja käivitatakse:

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

Allpool näeme algoritmi käitamise tulemusi sünteetilisel andmekogumil, mis koosneb 300 andmepunktist. Punktid genereeriti algselt 3 erineva jaotusega: N([10,50], I), N([50,10], I) ja N([150,100], I).

hajuvusdiagramm1
Joonis 1: Demoandmestiku hajuvusdiagramm

Algoritm tuvastas pärast 10 iteratsiooni käitamist järgmised 3 klastri keskust: [10.17, 50.11], [49.99, 10.13] ja [149.97, 99.81]. Lõpuks, kuna käsitleme kõike Bayesi viisil, ei saa me anda mitte ainult klastri keskuste ühepunktilisi hinnanguid, vaid ka nende tõenäosusjaotust, kasutades valem võrrand.

scatterplot2-soojakaart
Joonis 2: Klastrite tsentrite tõenäosuste hajuvusdiagramm

Ülaltoodud joonisel kujutame need tõenäosused; punased alad näitavad suurt tõenäosust olla klastri keskpunktis ja mustad alad näitavad väikest tõenäosust.

Java-rakenduse kasutamiseks reaalmaailma rakendustes peate kirjutama välise koodi, mis teisendab teie algse andmestiku nõutavasse vormingusse. Lisaks võib olla vajalik täiendav kood, kui soovite väljundit visualiseerida, nagu eespool näeme. Lõpuks pange tähele, et Apache Commons Math teek on projekti kaasatud ja seega pole demode käivitamiseks vaja täiendavat konfiguratsiooni.

Kui kasutate juurutamist mõnes huvitavas projektis, kirjutage meile ja me avaldame teie projekti oma ajaveebis. Kui teile artikkel meeldib, võtke hetk ja jagage seda Twitteris või Facebookis.

Ajatempel:

Veel alates Datumbox