Вычислить безусловные вероятности в байесовском ньюторке - PullRequest
1 голос
/ 22 января 2020

Может ли пакет bnlearn вычислить безусловные вероятности каждого узла? Например, в простом случае, если у нас есть три узла A, S ---> E:

library(bnlearn)
dag <- empty.graph(nodes = c("A", "S", "E"))

dag <- set.arc(dag, from = "A", to = "E")
dag <- set.arc(dag, from = "S", to = "E")
 A.lv <- c("young", "adult", "old")
 S.lv <- c("M", "F")
 E.lv <- c("high", "uni")

 A.prob <- array(c(0.30, 0.50, 0.20), dim = 3, dimnames = list(A = A.lv))
 S.prob <- array(c(0.60, 0.40), dim = 2, dimnames = list(S = S.lv))
 E.prob <- array(c(0.75, 0.25, 0.72, 0.28, 0.88, 0.12, 0.64,
                   0.36, 0.70, 0.30, 0.90, 0.10), dim = c(2, 3, 2), dimnames = list(E = E.lv, A = A.lv, S = S.lv))

 cpt <- list(A = A.prob, S = S.prob, E = E.prob)
 bn <- custom.fit(dag, cpt)

Все команды bnlearn (например, E.prob) показывают условные вероятности? Если я хочу вычислить P (E = высокий), я должен добавить следующее:

 E=as.data.frame(E.prob)
 A=as.data.frame(t(A.prob))
 S=as.data.frame(t(S.prob))

 R=c(E$young.M[1]*A$young*S$M, E$adult.M[1]*A$adult*S$M,
   E$old.M[1]*A$old*S$M, E$young.F[1]*A$young*S$F,
   E$adult.F[1]*A$adult*S$F, E$old.F[1]*A$old*S$F)
 print(sum(R))

P (E = высокий) = 0,745. Однако это невозможно для огромной сети!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...