bn.fit中的错误预测bnlear R中的函数

时间:2015-06-02 14:20:34

标签: r bayesian bayesian-networks

我已经在bnlearn R包中学习并安装了贝叶斯网络,我希望预测它是“事件”节点值。

fl="data/discrete_kdd_10.txt"
h=TRUE
dtbl1 = read.csv(file=fl, head=h, sep=",")
net=hc(dtbl1)
fitted=bn.fit(net,dtbl1)

我想根据存储在另一个文件中的证据预测“event”节点的值,该文件与用于学习的文件具有相同的结构。

fileName="data/dcmp.txt"
dtbl2 = read.csv(file=fileName, head=h, sep=",")
predict(fitted,"event",dtbl2)

然而,预测失败了     Error in check.data(data) : variable duration must have at least two levels.

我不明白为什么对证据data.frame中的变量级别有任何限制。

dtbl2 data.frame只包含几行,每个场景对应一个我要预测“事件”值的场景。

我知道我可以使用cpquery,但我也希望将predict函数用于具有混合变量(离散和连续)的网络。我还没有找到如何在cpqery中使用连续变量的证据。

有人可以解释一下我对predict函数的错误,我该怎么做? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

问题在于阅读

中的证据data.frame
fileName="data/dcmp.txt"
dtbl2 = read.csv(file=fileName, head=h, sep=",")
predict(fitted,"event",dtbl2)

导致分类变量为具有不同级别数的因子(原始训练集的级别子集)。

我使用以下代码来解决此问题。

for(i in 1:dim(dtbl2)[2]){
  dtbl2[[i]] = factor(dtbl2[[i]],levels = levels(dtbl1[[i]]))
}

顺便说一句,bnlearn包确实适合具有混合变量的模型,并且还提供了预测函数。