Prosty przykład / przypadek użycia dla BNT gaussian_CPD?
Próbuję zaimplementować klasyfikator Naive Bayes przy użyciu BNT i MATLAB. Do tej pory trzymałem się prostegotabular_CPD
zmienne i „domysły” prawdopodobieństw dla zmiennych. Moja prototypowa sieć składa się z następujących elementów:
DAG = false(5);
DAG(1, 2:5) = true;
bnet = mk_bnet(DAG, [2 3 4 3 3]);
bnet.CPD{1} = tabular_CPD(bnet, 1, [.5 .5]);
bnet.CPD{2} = tabular_CPD(bnet, 2, [.1 .345 .45 .355 .45 .3]);
bnet.CPD{3} = tabular_CPD(bnet, 3, [.2 .02 .59 .2 .2 .39 .01 .39]);
bnet.CPD{4} = tabular_CPD(bnet, 4, [.4 .33333 .5 .33333 .1 .33333]);
bnet.CPD{5} = tabular_CPD(bnet, 5, [.5 .33333 .4 .33333 .1 .33333]);
engine = jtree_inf_engine(bnet);
Tutaj zmienna 1 jest moją pożądaną zmienną wyjściową, ustawioną na początkowe przypisanie prawdopodobieństwa 0,5 do każdej klasy wyjściowej.
Zmienne 2-5 definiują CPD dla funkcji, które mierzę:
2 to rozmiar klastra, od 1 do kilkunastu lub więcej3 to stosunek, który będzie wartością rzeczywistą> = 14 i 5 to wartości odchylenia standardowego (rzeczywiste) (rozrzut X i Y)Aby sklasyfikować klaster kandydujący, przerywam wszystkie pomiary funkcji na 3-4 zakresy, tak:
...
evidence = cell(1, 5);
evidence{2} = sum(M > [0 2 6]);
evidence{3} = sum(O > [0 1.57 2 3]);
evidence{4} = sum(S(1) > [-Inf 1 2]);
evidence{5} = sum(S(2) > [-Inf 0.4 0.8]);
eng = enter_evidence(engine, evidence);
marginals = marginal_nodes(eng, 1);
e = marginals.T(1);
...
W rzeczywistości działa to całkiem dobrze, biorąc pod uwagę, że zgaduję tylko w nawiasach zakresu i wartościach prawdopodobieństwa. Ale wierzę, że to co japowinien używać tutaj jestgaussian_CPD
. jamyśleć żegaussian_CPD
może nauczyć się zarówno optymalnych nawiasów, jak i prawdopodobieństw (jako macierzy średniej i macierzy kowariancji oraz wagi).
Moim problemem jest to, że niczego nie znajdujęprosty przykłady tego, jak BNTgaussian_CPD
klasa jest używana. Jak na przykład chciałbym zainicjować agaussian_CPD
do w przybliżeniu takiego samego zachowania jak mojetabular_CPD
powyżej?