我在 R 中使用 bnlearn 包来学习我的贝叶斯网络的结构及其参数。我想要做的是在给定其他节点的值作为证据的情况下“预测”节点的值(显然,我们正在预测其值的节点除外)。
我有连续变量。
library(bnlearn) # Load the package in R
data(gaussian.test)
training.set = gaussian.test[1:4000, ] # This is training set to learn the parameters
test.set = gaussian.test[4001:4010, ] # This is test set to give as evidence
res = hc(training.set) # learn BN structure on training set data
fitted = bn.fit(res, training.set) # learning of parameters
pred = predict(fitted$C, test.set) # predicts the value of node C given test set
table(pred, test.set[, "C"]) # compares the predicted value as original
现在,这段代码运行良好,并给出了一个表格,您可以在其中看到节点 C 的预测值与测试集中节点 C 的原始值完全相同。
我不明白其中的原因,有人可以解释一下吗?
我知道,我提供的测试集的整个 df 已经包含节点 C 的值。但是如果我给出其他列的数据,它就会出错。因此,我尝试了将其他值设为 0 的替代方法。
test.set$C = 0 # To not give the original value of node C as evidence
pred = predict(fitted$C, test.set) # predicts the value of node C given test set
table(pred, test.set[, "C"]) # compares the predicted value as original
这种方法是错误的吗?(不允许使用“NA”。)