- Heinäkuu 7, 2014
- Vasilis Vryniotis
- . 1 kommentti
Aikaisemmissa artikkeleissa keskustelimme yksityiskohtaisesti Dirichlet-prosessiseosmallit ja miten niitä voidaan käyttää klusterianalyysissä. Tässä artikkelissa esitellään Java-toteutus kaksi erilaista DPMM-mallia: Dirichlet Multivariate Normal Sexture Model, jota voidaan käyttää Gaussin tietojen klusterointiin, ja Dirichlet-Multinomial Sext Model, jota käytetään asiakirjojen ryhmittelyyn. Java-koodi on avointa lähdettä GPL v3 -lisenssillä, ja sen voi ladata ilmaiseksi osoitteesta Github.
Päivitys: Datumbox Machine Learning Framework on nyt avoimen lähdekoodin ja ilmainen download. Tutustu pakettiin com.datumbox.framework.machinelearning.clustering nähdäksesi Dirichlet-prosessisekoitusmallien käyttöönotto Javassa.
Dirichlet-prosessiseosmallin toteutus Java-sovelluksessa
Koodi toteuttaa Dirichlet-prosessiseosmallin Gibbs-samplerilla ja käyttää Apache Commons Math 3.3 -matriisikirjastoa. Sillä on lisenssi GPLv3: lla, joten voit käyttää sitä, muokata sitä ja levittää sitä vapaasti. Voit ladata Java-toteutuksen osoitteesta Github. Huomaa, että kaikki klusterointimenetelmän teoreettiset osat löytyvät edellisistä viidestä artikkelista ja yksityiskohtaiset Javadoc-kommentit lähdekoodin toteuttamiseksi.
Alla luetellaan koodin korkean tason kuvaus:
1. DPMM-luokka
DPMM on abstrakti luokka ja toimii pohjana erilaisille malleille, toteuttaa Kiinalainen ravintola-prosessi ja sisältää Kaatunut Gibbs-näytteenotin. Sillä on julkinen menetelmäklusteri (), joka vastaanottaa tietojoukon pisteiden luettelona ja vastaa klusterianalyysin suorittamisesta. Muita luokan hyödyllisiä menetelmiä ovat getPointAssignments (), jota käytetään hakemaan klusterimääritykset klusterin valmistuttua, ja getClusterList (), jota käytetään tunnistettujen klustereiden luettelon saamiseen. DPMM sisältää staattisen sisäkkäisen abstraktin luokan Cluster; se sisältää useita abstrakteja menetelmiä, jotka koskevat pisteiden hallintaa ja taka-pdf: n arviointia, joita käytetään klusterimääritysten estimointiin.
2. Gaussin DPMM-luokka
GaussianDPMM on Dirichlet Multivariate Normal Mixture Model -sovelluksen toteutus ja laajentaa DPMM-luokkaa. Se sisältää kaikki menetelmät, joita tarvitaan arvioimaan todennäköisyydet Gaussin oletuksen perusteella. Lisäksi se sisältää staattisen sisäkkäisen luokan Cluster, joka toteuttaa kaikki abstraktit DPMM.Cluster-luokan menetelmät.
3. MultinomialDPMM-luokka
MultinomialDPMM toteuttaa Dirichlet-Multinomial Seosmallin ja laajentaa DPMM-luokkaa. Samoin kuin GaussianDPMM-luokka, se sisältää kaikki menetelmät, joita tarvitaan todennäköisyyksien arvioimiseksi Multinomial-Dirichlet-oletuksen mukaisesti, ja sisältää staattisen sisäkkäisen luokan klusterin, joka toteuttaa DPMM.Clusterin abstraktit menetelmät.
4. SRS-luokka
SRS-luokkaa käytetään yksinkertaisen satunnaisen näytteenoton suorittamiseen taajuustaulukosta. Gibbs Sampler käyttää sitä arvioimaan uudet klusterimääritykset iteratiivisen prosessin jokaisessa vaiheessa.
5. Pisteluokka
Point-luokka toimii dupleksina, joka tallentaa tietueen tiedot yhdessä tunnuksen kanssa.
6. Apache Commons Math Lib
Apache Commons Math 3.3 lib -sovellusta käytetään matriisikertomuksiin, ja se on toteutuksemme ainoa riippuvuus.
7. DPMMExample-luokka
Tämä luokka sisältää esimerkkejä Java-toteutuksen käytöstä.
Java-toteutuksen käyttäminen
Koodin käyttäjä pystyy konfiguroimaan kaikki seosmallien parametrit, mukaan lukien mallityypit ja hyperparametrit. Seuraavassa koodinpätkässä voimme nähdä, kuinka algoritmi alustetaan ja suoritetaan:
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();
Alla voimme nähdä algoritmin suorittamisen synteettisessä aineistossa, joka koostuu 300 datapisteestä. Pisteet luotiin alun perin kolmella eri jakaumalla: N ([3], I), N ([10,50], I) ja N ([50,10], I).
Kuva 1: Hajontakaavio demotiedostosta
Kymmenen iteraation suorittamisen jälkeen algoritmi tunnisti seuraavat 10 klusterikeskusta: [3, 10.17], [50.11, 49.99] ja [10.13, 149.97]. Lopuksi, koska käsittelemme kaikkea Bayesin tavalla, pystymme tarjoamaan klusterikeskusten yhden pisteen estimaatit myös niiden todennäköisyysjakauman käyttämällä kaava .
Kuva 2: Hajontakaavio klustereiden keskusten todennäköisyydestä
Yllä olevassa kuvassa piirrämme nämä todennäköisyydet; punaiset alueet osoittavat suuren todennäköisyyden olla klusterin keskipiste ja mustat alueet osoittavat pienen todennäköisyyden.
Jos haluat käyttää Java-toteutusta reaalimaailman sovelluksissa, sinun on kirjoitettava ulkoinen koodi, joka muuntaa alkuperäisen tietojoukon vaadittuun muotoon. Lisäksi lisäkoodi voi olla tarpeen, jos haluat visualisoida lähdön kuten näemme yllä. Lopuksi huomaa, että Apache Commons Math -kirjasto sisältyy projektiin, joten esittelyjen suorittamiseen ei tarvita lisäasetuksia.
Jos käytät toteutusta mielenkiintoisessa projektissa, jätä meille rivi ja me mainitsemme projektisi blogissamme. Jos pidät artikkelista, ota hetki ja jaa se Twitterissä tai Facebookissa.
- AI
- ai taide
- ai taiteen generaattori
- ai robotti
- tekoäly
- tekoälyn sertifiointi
- tekoäly robotti
- tekoälyrobotit
- tekoälyohjelmisto
- blockchain
- blockchain-konferenssi ai
- coingenius
- keskustelullinen tekoäly
- kryptokonferenssi ai
- dall's
- Datumbox
- syvä oppiminen
- google ai
- koneoppiminen
- Koneoppiminen ja tilastot
- Platon
- plato ai
- Platonin tietotieto
- Platon peli
- PlatonData
- platopeliä
- Ohjelmointi
- mittakaava ai
- syntaksi
- zephyrnet