r - R包bnlearn:cpquery vs predict - 不同的结果?
问题描述
我想使用我的贝叶斯网络作为分类器,首先是完整的证据数据(predict
),还有不完整的数据(bnlearn::cpquery
)。但似乎,即使使用相同的证据,这些函数也会给出不同的结果(不仅仅是基于采样引起的轻微偏差)。
有了完整的数据,可以很容易地使用 R 的predict
功能:
predict(object = BN,
node = "TargetVar",
data = FullEvidence ,
method = "bayes-lw",
prob = TRUE)
通过分析prob
属性,我了解到predict
-function 只是选择分配概率最高的因子级别。
当涉及不完整的证据(仅知道某些节点的结果)时,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
,“概率”属性给我 ap(false) = 27%,而cpquery
给我 p(false) = 2,2%。
这样做的“正确”方式是什么?仅使用 cpquery,也用于完整数据?为什么会有很大的差异?
谢谢你的帮助!
解决方案
正如 user20650 所说,增加预测调用中的样本数量是获得非常相似结果的解决方案。因此,只需n = ...
在函数调用中提供参数即可。
当然这是有道理的,我只是不知道函数中的那个参数predict()
。在bn.fit 实用程序中没有关于它的文档,在predict的非常通用的文档中也没有。
推荐阅读
- html - 标题内的简单文本
- mongodb - 有没有办法限制MongoDB中的用户资源?
- python - Django 过滤器模块:查找表达式(年份)未返回所需的查询集
- sql - Rails 和 SQL - 与数组、条目中的所有元素相关联
- python - python 套接字中的 TCP 问题,会产生发送多个图像的问题
- java - 在我没有回复消息之前,我们如何才能在 Java rabbitmq 的队列中接收不到新消息?
- javascript - 水平滚动上的粘性表格标题
- coq - 在逻辑基础中证明 MStar' (IndProp.v)
- amazon-web-services - 无法将服务角色策略附加到客户角色
- php - 如何在 Laravel API 中使用电话号码和 OTP 而不是密码对用户进行身份验证?