Klaszterezés Dirichlet folyamatkeverék modellel a Java PlatoBlockchain adatintelligenciában. Függőleges keresés. Ai.

Klaszterezés Dirichlet Process Mixture Modell Java nyelven

Az előző cikkekben részletesen tárgyaltuk a Dirichlet eljárási keverékmodellek és hogyan használhatók fel a klaszteranalízisben. Ebben a cikkben egy Java implementációt mutatunk be két különböző DPMM modell: a Dirichlet Multivariate Normal Mixture Model, amely a Gauss-adatok klaszterezésére használható, és a Dirichlet-Multinomial Mixture Model, amelyet dokumentumok klaszterezésére használnak. A Java kód nyílt forráskódú GPL v3 licenc alatt, és ingyenesen letölthető innen GitHub.

Frissítés: A Datumbox Machine Learning Framework nyílt forráskódú és ingyenes letöltés. Tekintse meg a com.datumbox.framework.machinelearning.clustering csomagot a Dirichlet Process Mixture Models Java-ban való megvalósításának megtekintéséhez.

Dirichlet Process Mixture Model implementáció Java nyelven

A kód megvalósítja a Dirichlet Process Mixture Model-t Gibbs Samplerrel, és az Apache Commons Math 3.3-at használja mátrixkönyvtárként. GPLv3 licenc alatt van, így nyugodtan használhatja, módosíthatja és szabadon terjesztheti, a Java implementációt pedig letöltheti a webhelyről. GitHub. Vegye figyelembe, hogy a fürtözési módszer összes elméleti részét megtalálja az előző 5 cikkben, és részletes Javadoc megjegyzéseket a forráskódban való megvalósításhoz.

Az alábbiakban felsorolunk egy magas szintű leírást a kódról:

1. DPMM osztály

A DPMM egy absztrakt osztály, és a különféle modellek alapjaként működik, megvalósítja a Kínai étterem folyamata és tartalmazza a Összecsukott Gibbs Sampler. Rendelkezik a cluster() nyilvános metódussal, amely pontlistaként fogadja az adatkészletet, és felelős a fürtelemzés végrehajtásáért. Az osztály további hasznos metódusai a getPointAssignments(), amely a fürt-hozzárendelések lekérésére szolgál a fürtözés befejezése után, és a getClusterList(), amely az azonosított fürtök listájának lekérésére szolgál. A DPMM tartalmazza a statikus beágyazott absztrakt osztályt, a Cluster; több absztrakt módszert tartalmaz a pontok kezelésére és az utólagos pdf becslésére, amelyek a klaszter hozzárendelések becslésére szolgálnak.

2. GaussianDPMM osztály

A GaussianDPMM a Dirichlet Multivariate Normal Mixture Model megvalósítása, és kiterjeszti a DPMM osztályt. Tartalmazza az összes olyan módszert, amely a valószínűségek Gauss-feltevés alapján történő becsléséhez szükséges. Ezenkívül tartalmazza a statikus beágyazott Cluster osztályt, amely megvalósítja a DPMM.Cluster osztály összes absztrakt metódusát.

3. MultinomialDPMM osztály

A MultinomialDPMM megvalósítja a Dirichlet-Multinomial Mixture Model-t és kiterjeszti a DPMM osztályt. A GaussianDPMM osztályhoz hasonlóan ez is tartalmazza az összes olyan módszert, amely a valószínűségek Multinomial-Dirichlet feltevés alapján történő becsléséhez szükséges, és tartalmazza a Cluster statikus beágyazott osztályt, amely megvalósítja a DPMM.Cluster absztrakt metódusait.

4. SRS osztály

Az SRS osztály az egyszerű véletlenszerű mintavételezés végrehajtására szolgál frekvenciatáblázatból. A Gibbs Sampler ezt használja az új fürt-hozzárendelések becslésére az iteratív folyamat minden lépésében.

5. Pontos osztály

A Point osztály egy sorként szolgál, amely a rekord adatait az azonosítójával együtt tárolja.

6. Apache Commons Math Lib

Az Apache Commons Math 3.3 lib a Mátrix szorzásokhoz használatos, és ez az egyetlen függősége a megvalósításunknak.

7. DPMMPéldaosztály

Ez az osztály példákat tartalmaz a Java implementáció használatára.

A Java implementáció használata

A kód felhasználója a keverékmodellek összes paraméterét be tudja állítani, beleértve a modelltípusokat és a hiperparamétereket is. A következő kódrészletben láthatjuk az algoritmus inicializálását és végrehajtását:

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

Az alábbiakban az algoritmus 300 adatpontból álló szintetikus adatkészleten való futtatásának eredményeit láthatjuk. A pontokat eredetileg 3 különböző eloszlás generálta: N([10,50], I), N([50,10], I) és N([150,100], I).

szórásdiagram1
1. ábra: A bemutató adatkészlet szóródási diagramja

Az algoritmus 10 iterációt követően a következő 3 klaszterközpontot azonosította: [10.17, 50.11], [49.99, 10.13] és [149.97, 99.81]. Végül, mivel mindent Bayes-módszerrel kezelünk, nem csak egypontos becslést tudunk adni a klaszterközpontokról, hanem azok valószínűségi eloszlását is a képlet egyenlet.

scatterplot2-hőtérkép
2. ábra: A klaszterek középpontjainak valószínűségeinek szórásdiagramja

A fenti ábrán ezeket a valószínűségeket ábrázoljuk; a piros területek nagy valószínűséggel egy klaszter középpontját jelzik, a fekete területek pedig alacsony valószínűséget.

A Java megvalósítás valós alkalmazásokban való használatához külső kódot kell írnia, amely átalakítja az eredeti adatkészletet a kívánt formátumba. Ezenkívül további kódra lehet szükség, ha a kimenetet a fentiek szerint kívánja megjeleníteni. Végül vegye figyelembe, hogy az Apache Commons Math könyvtár is benne van a projektben, így nincs szükség további konfigurációra a demók futtatásához.

Ha egy érdekes projektben használja a megvalósítást, írjon nekünk, és blogunkon bemutatjuk projektjét. Ha tetszett a cikk, kérjük, szánjon egy percet és ossza meg a Twitteren vagy a Facebookon.

Időbélyeg:

Még több Datumbox