首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bnlearn:预测多节点值

Bnlearn:预测多节点值
EN

Stack Overflow用户
提问于 2015-05-05 17:54:49
回答 1查看 1.5K关注 0票数 2

我正在使用一个r包"bnlearn“来使用我构建的bayes网:

代码语言:javascript
复制
bn.gs <- gs(x = dat, cluster = NULL, whitelist = wl, blacklist = bl, test = NULL, alpha = 0.05, B = NULL, debug = FALSE, optimized = TRUE, strict = FALSE, undirected = FALSE)

它给了我一个很好的情节,一切似乎都很顺利。所有变量都是连续的,介于-1和1之间。喂养变量(那些没有父母)生成如下(N = 1000):

代码语言:javascript
复制
A <- runif(N, min=-1, max=1)

假设我的变量是A,B,.我知道C,G和M的值,现在我想预测其余节点的值(A,B,D,.)给定C、G和M,就我而言,预测()一次只为一个节点工作。

是否有一种同时预测多个节点的方法,还是应该通过对每个节点在时间上应用预测()来得到正确的值?考虑到“C”的值,我已经尝试预测节点"A“的值:

代码语言:javascript
复制
predict(bn.gs, node = "A", testdata, debug = TRUE)

其中testdata是此表单中的数据框架:

代码语言:javascript
复制
A    B    C    D    E    ...
0.0  0.0  0.7  0.0  0.0  ...

但我明白了:

代码语言:javascript
复制
* predicting values for node A.
  > prediction for observation 1 is nan with predictor:
    (0.000000) + (0.000000) * (nan) + (0.000000) * (nan)
[1] NA

我肯定我在这里做错了什么。在我的网络中有弧C -> S -> A.还有“nan”是奇怪的,因为我的网络应该定义得很好。

谢谢:)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-03 14:51:31

为了防止其他人也能找到答案,我用rbmn包解决了这个问题。在使用bnlearn创建了一个十亿个对象之后,我做了以下工作:

代码语言:javascript
复制
my.bn.par <- bn.fit(x = bn.gs, data = dat)

library("rbmn")

my.bn.par.rbmn <- bnfit2nbn(my.bn.par)
print8nbn(my.bn.par.rbmn)
my.bn.par.mn <- nbn2mn(my.bn.par.rbmn)

# This is the names vector for my nodes:
names <- c("A","B","C","D","E")

# Names of given variables
obsnames <- c("C","E")

# Values for given variables
obsval <- c(0.51,-0.24)

# Names of variables to be predicted
prednames <- setdiff(names, obsnames)

# Then predict all the unknown variables
print8mn(condi4joint(my.bn.par.mn, par = prednames, pour = obsnames, x2 = obsval))

这种方法是在Marco的书“贝叶斯网络”中提出的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30059988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档