R 包 bnlearn:cpquery 与不同的结果?



我想使用我的贝叶斯网络作为分类器,首先是完整的证据数据(predict(,但也是不完整的数据(bnlearn::cpquery(。但似乎,即使使用相同的证据,这些函数也会给出不同的结果(不仅基于采样引起的轻微偏差(。

有了完整的数据,就可以轻松使用 R 的predict函数:

predict(object = BN,
node = "TargetVar",
data = FullEvidence ,
method = "bayes-lw",
prob = TRUE)

通过分析prob属性,我了解到predict函数只是选择分配了最高概率的因子水平。

当涉及到不完整的证据(只有某些节点的结果是已知的(时,predict不再有效:

Error in check.fit.vs.data(fitted = fitted, 
data = data, 
subset = setdiff(names(fitted),  : 
required variables [.....] are not present in the data.` 

因此,我想将bnlearn::cpquery与已知证据列表一起使用:

cpquery(fitted = BN, 
event = TargetVar == "TRUE", 
evidence = evidenceList, 
method = "lw",
n = 100000)

同样,我只想使用概率最高的因子作为预测。因此,如果cpquery的结果高于 0.5,我将预测设置为 TRUE,否则设置为 FALSE。

我试图通过向两个函数提供相同(完整(的数据来监控该过程,但它们没有给我相同的结果。存在很大差异,例如predict的 "prob"-属性给了我一个 p(false( = 27%,而cpquery给了我 p(false( = 2,2%。

这样做的"正确"方法是什么?仅使用 cpquery,也用于完整数据?为什么差异很大?

感谢您的帮助!

正如user20650所说,增加预测调用中的样本数量是获得非常相似结果的解决方案。因此,只需在函数调用中提供参数n = ...

当然这是有道理的,我只是不知道predict()函数中的那个论点。 在bn.fit实用程序中没有关于它的文档,在相当通用的预测文档中也没有

相关内容

  • 没有找到相关文章

最新更新