- Július 7, 2014
- Vasilis Vryniotis
- . 1 megjegyzés
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).
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 .
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.
- AI
- ai művészet
- ai art generátor
- van egy robotod
- mesterséges intelligencia
- mesterséges intelligencia tanúsítás
- mesterséges intelligencia robot
- mesterséges intelligencia robotok
- mesterséges intelligencia szoftver
- blockchain
- blokklánc konferencia ai
- coingenius
- társalgási mesterséges intelligencia
- kriptokonferencia ai
- dall's
- Datumbox
- mély tanulás
- google azt
- gépi tanulás
- Gépi tanulás és statisztika
- Plató
- plato ai
- Platón adatintelligencia
- Platón játék
- PlatoData
- platogaming
- Programozás
- skála ai
- szintaxis
- zephyrnet