Bnlearn R package Reference Card
Transkrypt
Bnlearn R package Reference Card
Bnlearn R package Reference Card Wojciech Wójciak [[email protected]] Politechnika Warszawska Programowanie i analiza danych w R 2011/2012 Wstęp bnlearn to pakiet R, który implementuje szereg wybranych algorytmów uczenia struktury sieci bayesowskiej zarówno ze zmiennymi dyskretnymi jak i ciągłymi. Pakiet implementuje algorytmy z rodziny algorytmów tzw. constraintbased, score-based oraz hybrydy. Ponadto udostępniono funkcje testujące warunkową zależność zmiennych (wykorzystywane w algorytmach constraint-based) oraz funkcje oceny „score function” (wykorzystywane w algorytmie scorebased) Dostępnych jest również kilka funkcji, służących estymacji parametrów bootstrap, kroswalidacji. Więcej informacji o pakiecie uzyskać można poprzez wydanie polecenia ?bnlearn::bnlearn w konsoli R. Użycie Pakiet bnlearn (wraz z zależnym pakietem utils – włączonym do standardowej dystrybucji R) jest dostępny poprzez CRAN. Pakiety opcjonalne to graph oraz snow oraz lattice. Dodatkowym opcjonalnym, aczkolwiek sugerowanym pakietem jest Rgraphviz - dostępny poprzez Bioconductor ( http://www.bioconductor.org/packages/release/bioc/html/Rgraphviz.ht ml ) Wczytanie pakietu bnlearn następuje poprzez wydanie polecenia: > library(bnlearn) Loading required package: grid Loading required package: graph Package Rgraphviz will be loaded as needed. Loading required package: lattice Package lattice loaded successfully bnlearn dostarczany jest wraz z przykładowym zbiorem danych learning.test. Na podstawie owych testowych danych można zilustrować działanie i funkcjonalność algorytmów implementowanych w przedmiotowym pakiecie. > str(learning.test) 'data.frame':5000 obs. of 6 variables: $ A: Factor w/ 3 levels "a","b","c": 2 2 1 1 1 3 3 2 2 2 ... $ B: Factor w/ 3 levels "a","b","c": 3 1 1 1 1 3 3 2 2 1 ... $ C: Factor w/ 3 levels "a","b","c": 2 3 1 1 2 1 2 1 2 2 ... $ D: Factor w/ 3 levels "a","b","c": 1 1 1 1 3 3 3 2 1 1 ... $ E: Factor w/ 3 levels "a","b","c": 2 2 1 2 1 3 3 2 3 1 ... $ F: Factor w/ 2 levels "a","b": 2 2 1 2 1 1 1 2 1 1 ... Zbiór testowy learning.test zawiera sześć zmiennych dyskretnych zakodowanych jako typ factor na 2 i 3 poziomach. Struktura sieci bayesowskiej skojarzona z owym zbiorem może zostać nauczona z wykorzystaniem jednego z algorytmów uczących zaimplementowanych w pakiecie. Dostępne algorytmy przedstawiono w poniżej tabeli. W nawiasach podano nazwę funkcji z pakietu bnlearn skojarzoną z danym algorytmem. constraintbased scorebased (hc) HillClimbing (gs) GrowShrink (tabu) Tabu Search (iamb) Incremental Association (fast.iamb) Fast Incremental Association hybrid (inter.iamb) Interleaved Incremental Association (mmpc) MaxMin Parents and Children (mmhc) (chow.liu) ChowLiu MaxMin HillClimbing (aracne) ARACNE (rsmax2) Restricted Maximization Przykład wykorzystania algorytmu Grow-Shrink: > bn_gs < gs(learning.test) > bn_gs Bayesian network learned via Constraintbased methods model: [partially directed graph] nodes: 6 arcs: 5 undirected arcs: directed arcs: average markov blanket size: average neighbourhood size: average branching factor: 1 4 2.33 1.67 0.67 learning algorithm: GrowShrink conditional independence test: Mutual Information (discrete) alpha threshold: 0.05 tests used in the learning procedure: 43 optimized: TRUE W podobny sposób skorzystać można z innych dostępnych algorytmów. > bn_iamb < iamb(learning.test) > bn_fastiamb < fast.iamb(learning.test) > bn_interiamb < inter.iamb(learning.test) > bn_hc < hc(learning.test, score=”aic”) Wyznaczone struktury sieci można zobrazować graficznie np. z użyciem metod dostarczonych w pakiecie Rgraphviz > par(mfrow = c(1, 2)) > highlight.opts < list(nodes = c("A", "B"), arcs = c("A", "B"), col = "red", fill = "grey") > graphviz.plot(bn_gs, highlight = highlight.opts) > graphviz.plot(bn_hc, highlight = highlight.opts) Dla porównania struktury sieci można posłużyć się funkcją compare(target, current, arcs = FALSE), która porównuje sieci w opraciu o Structural Hamming Distance (SHD) > unlist(compare(bn_gs,bn_iamb)) tp fp fn 5 0 0 > unlist(compare(bn_gs,bn_hc)) tp fp fn 4 1 1 Zwraca ona listę 3 wyników porównań pomiędzy obiektami target i current wraz z liczbą wystąpień tych wyników. Zatem dla każdego porównana bn_gs są bn_iamb są jednakowe, w przeciwieństwie do bn_gs i bn_hc. Dla testowania warunkowej zależności zmiennych dostarczono funkcję ci.test(x, test=NULL, ...) Wybranie odpowiedniego testu do badania niezależności następuje poprzez przekazanie odpowiedniej wartości parametru test do w/w funkcji. Poniżej zestawiono dostępne testy. (M-C == Monte-Carlo). rozkład wielomianowy wielowymiarowy rozkład normalny mutual information: linear correlation: ('mi') asymptotic chi-square test ('cor') Student's t test ('mc-mi') M-C permutation test ('mc-cor') M-C permutation test ('smc-mi') M-C permutation test ('smc-cor') sequential M-C perm. test shrinkage estimator: Fisher's Z: ('mi-sh') test based on the James- ('zf') asymptotic normal test Stein estimator for the mutual info. ('mc-zf') M-C permutation test ('smc-zf') sequential M-C perm. test Pearson's X^2: ('x2') asymptotic chi-square test mutual information: ('mc-x2') M-C permutation test ('mi-g') asymptotic chi-square test (‘smc-x2’) sequential M-C ('mc-mi-g') M-C permutation test permutation test ('smc-mi-g') sequential M-C perm. test ('aict') Akaike Information Criterion shrinkage estimator: ('mi-g-sh') test based on the James-Stein estimator for the mutual info. Przykład użycia dla zbioru danych marks (dostarczany z bnlearn): > data(marks) > ci.test("STAT", "VECT", "ALG", data = marks, test = "zf") $p.value [1] 0.6289112 Wiele funkcji z pakietu bnlearn posiada możliwość wyświetlenia dodatkowych informacji po ustawieniu parametru debug=TRUE > bn_gs < gs(learning.test, debug=TRUE) Opracowano w oparciu o „Learning Bayesian Networks with the bnlearn R Package” (Marco Scutari, Journal of Statistical Software Jul 2010, Vol 35, Issue 3)