我的训练数据如下:
A B C D
1 1 1 1
1 1 1 2
1 1 2 1
1 1 2 1
1 1 2 2
1 1 2 2
1 2 1 1
1 2 1 1
1 2 1 2
1 2 1 2
1 2 2 1
1 2 2 2
2 1 1 1
2 1 1 1
2 1 1 2
2 1 1 2
2 1 2 1
2 1 2 1
2 1 2 2
2 1 2 2
2 2 1 1
2 2 1 2
2 2 2 1
2 2 2 2
2 2 2 2
以及我的测试数据:
A B C D
1 1 2 1
1 1 2 2
1 1 1 1
2 1 2 2
我使用以下方法进行拟合:
dag <- model2network("[A][B][C|A:B][D|A:B:C]")
training <- bn.fit(dag, trainingData, method = "mle", keep.fitted = TRUE)
而且我正在尝试使用以下方法预测D列的值:
predicted = predict(training, node = "D", data = testData, method = "parents", prob = FALSE)
但是我得到了错误
check.data(data,allow.levels = TRUE)中的错误:变量B必须至少有两个级别。
我该如何解决?我认为测试数据不需要具有包含在训练数据中的所有级别-实际上,即使测试数据仅具有一个实例,也不应该能够进行预测吗?
由于您的变量都被编码为factor
,因此它们“具有”因子水平列表。创建training
时,在B列中具有1
和2
,并且因子级别(隐式在后台)设置为c(1
,2
)。但是,当您创建testData
时,您在B列中只有1
,并且因子级别(隐式地在后台)被设置为仅1
。
我们可以通过明确声明trainign$B
具有级别c(1, 2)
来解决此问题,即使在数据中仅出现1
。
trainign$B <- factor(training$B, levels=c(1, 2))