Združevanje z mešanim modelom Dirichletovega procesa v Java PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Grozdanje z modelom zmesi Dirichlet Process Java

V prejšnjih člankih smo podrobno razpravljali o Dirichletovi modeli mešanic in kako jih je mogoče uporabiti pri analizi grozdov. V tem članku bomo predstavili izvajanje Java dva različna modela DPMM: Dirkletov večvazijski model običajne mešanice, ki ga je mogoče uporabiti za združevanje Gaussovih podatkov, in Dirichletov multinomial model mešanice, ki se uporablja za združevanje dokumentov. Koda Java je z licenco GPL v3 odprta in jo lahko brezplačno prenesete z nje GitHub.

Posodobitev: Okvir za strojno učenje Datebox je zdaj odprtokoden in brez njega prenesi. Oglejte si paket com.datumbox.framework.machinelearning.clustering in si oglejte izvedbo modelov mešanic Dirichlet Process Mešanice na Javi.

Izvedba modela Dirichlet Process Mešanica na Javi

Koda implementira Dirichletov model mešanice procesa z Gibbsovim vzorčevalnikom in uporablja Apache Commons Math 3.3 kot knjižnico matric. Licenciran je pod GPLv3, zato ga lahko uporabljate, spreminjate in prosto distribuirate, izvajanje Java pa lahko prenesete iz GitHub. Upoštevajte, da lahko vse teoretične dele metode združevanja najdete v prejšnjih 5 člankih in podrobne Javadoc-ove komentarje za izvajanje v izvorni kodi.

Spodaj navajamo opis na visoki ravni za kodo:

1. razred DPMM

DPMM je abstrakten razred in deluje kot osnova za različne modele, ki izvajajo Kitajski restavracijski postopek in vsebuje Vzorčni vzorček Gibbsa. Ima javno metodo cluster (), ki nabor podatkov prejme kot seznam točk in je odgovorna za izvajanje analize gruče. Druge uporabne metode razreda so getPointAssignments (), ki se uporablja za pridobivanje dodeljevanja gruč po končanem združevanju v gruče in getClusterList (), ki se uporablja za pridobivanje seznama identificiranih gruč. DPMM vsebuje statični ugnezdeni abstraktni razred Cluster; vsebuje več abstraktnih metod v zvezi z upravljanjem točk in oceno posteriornega pdf-ja, ki se uporabljajo za oceno dodeljevanja grozdov.

2. razred GaussianDPMM

GaussianDPMM je implementacija Dirichletovega multivariatnega modela običajnih mešanic in razširja razred DPMM. Vsebuje vse metode, ki so potrebne za oceno verjetnosti po Gaussovi predpostavki. Poleg tega vsebuje statični ugnezdeni razred Cluster, ki izvaja vse abstraktne metode razreda DPMM.Cluster.

3. MultinomialDPMM razred

MultinomialDPMM izvaja model Dirichlet-Multinomial Mešanica in razširi razred DPMM. Podobno kot razred GaussianDPMM vsebuje vse metode, ki so potrebne za oceno verjetnosti po predpostavki Multinomial-Dirichlet, in vsebuje statični ugnezdeni razred grozda, ki izvaja abstraktne metode DPMM.Cluster.

4. razred SRS

Razred SRS se uporablja za izvajanje preprostega naključnega vzorčenja iz frekvenčne tabele. Gibbsov vzorčevalnik uporablja za oceno novih dodelitev grozdov v vsakem koraku iterativnega postopka.

5. Točkovni razred

Razred Point služi kot nabor, ki shranjuje podatke zapisa skupaj s svojim id-jem.

6. Apache Commons Math Lib

Lipa Apache Commons Math 3.3 se uporablja za množenje matric in je edina odvisnost našega izvajanja.

7. razred DPMMExample

Ta razred vsebuje primere uporabe Java aplikacije.

Uporaba izvedbe Java

Uporabnik kode lahko konfigurira vse parametre modelov mešanic, vključno z vrstami modelov in hiperparametri. V naslednjem delčku kode lahko vidimo, kako se algoritem inicializira in izvede:

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

Spodaj lahko vidimo rezultate izvajanja algoritma na sintetičnem naboru podatkov, ki je sestavljen iz 300 podatkovnih točk. Točke so prvotno ustvarile 3 različne porazdelitve: N ([10,50], I), N ([50,10], I) in N ([150,100], I).

rasipanje plina1
Slika 1: Scatter Plot predstavitvenih podatkov

Po zagonu 10 iteracij je algoritem določil naslednja 3 centra grozdov: [10.17, 50.11], [49.99, 10.13] in [149.97, 99.81]. Nazadnje, ker vse obravnavamo na Bayesov način, ne moremo zagotoviti le enotočkovnih ocen centrov grozdov, temveč tudi njihovo verjetnostno porazdelitev z uporabo Formula enačba.

Sterflot2-toplotna karta
Slika 2: Razpršenost verjetnosti središč grozdov

Na zgornji sliki prikazujemo te verjetnosti; rdeča območja označujejo veliko verjetnost, da so središče gruče, črna območja pa majhno.

Če želite uporabljati izvajanje Java v aplikacijah v resničnem svetu, morate napisati zunanjo kodo, ki pretvori vaš prvotni nabor podatkov v želeno obliko. Poleg tega bo morda potrebna dodatna koda, če želite vizualizirati izhod, kot vidimo zgoraj. Nazadnje upoštevajte, da je knjižnica Apache Commons Math vključena v projekt, zato za zagon predstavitev ni potrebna dodatna konfiguracija.

Če uporabite izvedbo v zanimivem projektu, nam pusti vrstico in vaš projekt bomo predstavili na našem blogu. Če vam je članek všeč, si vzemite trenutek in ga delite na Twitterju ali Facebooku.

Časovni žig:

Več od Datumbox