Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据拟合到BNR中的学习模型_R - Fatal编程技术网

将数据拟合到BNR中的学习模型

将数据拟合到BNR中的学习模型,r,R,我在R中有一个bnlearn模型,它是使用带有4个分类变量和8个数值变量的gs函数学习的。 当我尝试使用测试集验证模型时,在尝试预测某些节点时会出现以下错误: check.fit.vs.data(fitted=object,data=data,subset=object[[node]]$parents)中出错: “关键字”在节点和数据中具有不同的级别数 在bnlearn中不能同时使用数字和分类变量吗?如果可能的话,我做错了什么 mydata$A <- as.factor(mydata$A)

我在R中有一个
bnlearn
模型,它是使用带有4个分类变量和8个数值变量的
gs
函数学习的。 当我尝试使用测试集验证模型时,在尝试预测某些节点时会出现以下错误:

check.fit.vs.data(fitted=object,data=data,subset=object[[node]]$parents)中出错:
“关键字”在节点和数据中具有不同的级别数

bnlearn
中不能同时使用数字和分类变量吗?如果可能的话,我做错了什么

mydata$A <- as.factor(mydata$A)
mydata$B <- as.numeric(mydata$B)
mydata$C <- as.numeric(mydata$C)
mydata$D <- as.numeric(mydata$D)
mydata$E <- as.factor(mydata$E)
mydata$F <- as.numeric(mydata$F)
mydata$G <- as.numeric(mydata$G)
mydata$H <- as.numeric(mydata$H)
mydata$I <- as.numeric(mydata$I)
mydata$J <- as.numeric(mydata$J)
mydata$K <- as.numeric(mydata$K)
mydata$L <- as.numeric(mydata$L)
mydata$M <- as.numeric(mydata$M)
mydata$N <- as.numeric(mydata$N)
mydata$O <- as.numeric(mydata$O)
mydata$P <- as.numeric(mydata$P)
mydata$Q <- as.numeric(mydata$Q)


#create vector of black arcs
temp1=vector(mode = "character", length = 0)
for (i in 1:length(varnames)){
    for (j in 1:length(varnames)){
        temp1 <- c(temp1,varnames[i])
        }
    }

temp2=vector(mode = "character", length = 0)
for (i in 1:length(varnames)){
    temp2 <- c(temp2,varnames)
    }

#creat to arcs of the model
arcdata = read.csv("C:/users/asaf/desktop/in progress/whitearcs.csv", header = T)
wfrom=arcdata[,1]
wto=arcdata[,2]

whitelist = data.frame(from = wfrom,to =wto)

#block unwanted arcs

blacklist = data.frame(from = temp1, to = temp2)

#fit and plot the model

#gaussian method
model = gs(mydata, whitelist = whitelist, blacklist = blacklist)



#inference procedure

learntmodel = bn.fit(model,mydata,method = "mle",debug = F)

graphviz.plot(learntmodel)
myvalidation=read.csv("C:/users/asaf/desktop/in progress/val.csv",    header = T)
#predicate A
pred = predict(learntmodel, node="A", myvalidation)
myvalidation$A <- pred

#predicate B
pred = predict(learntmodel, node="B", myvalidation)
myvalidation$B <- pred

mydata$A
bnlearn
不能同时处理混合变量(定性和定量),我在
deal
包中读到了这一点

另一种可能是使用
离散化
将连续变量转换为离散变量:

dmydata <- discretize(mydata, breaks = 2, method = "interval")

model <- gs(dmydata, whitelist = whitelist, blacklist = blacklist)

dmydata事实上,我今天也遇到了同样的问题,我通过确保连接到问题节点的其他节点。。。i、 e.$A,也有相同数量的级别。

请向我们显示您的代码;最理想的情况是,一个最小、完整的例子再现了这个问题。
mydata$a
是否与
myvalidation$a
具有相同的级别数?至于另一条评论,除非你提供数据,否则几乎不可能帮助你。是的。mydata$A和myvalidation$A的级别数相同。。2准确地说。你能用
表格(mydata$A,myvalidation$A,exclude=NULL)编辑你的问题吗。这会返回什么
all.equal(sort(unique(mydata$A))、sort(unique(myvalidation$A)))
这不是真的-bnlearn在v3.7中增加了对条件线性高斯网络的支持