变量必须至少有两个级别(R 代码)
Variable must have at least two levels (R code)
我的训练数据是这样的:
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)
但是我得到了错误
Error in check.data(data, allow.levels = TRUE) : variable B must
have at least two levels.
我该如何解决这个问题?我认为测试数据不需要包含训练数据中的所有级别 - 事实上,即使测试数据只有一个实例,也不应该可以预测吗?
由于您的变量都被编码为 factor
它们 "have" 一个因子水平列表。当您创建 training
时,您在 B 列中有 1
和 2
,并且因子水平(隐含地,在后台)设置为 c(1
, 2
).但是,当您创建 testData
时,您在 B 列中只有 1
,并且因子水平(隐含地,在后台)设置为仅 1
.
我们可以通过明确声明 testData$B
具有级别 c(1, 2)
来解决此问题,即使数据中仅出现 1
。
testData$B <- factor(testData$B, levels=c(1, 2))
编辑:
修复了我写 training
而我完全打算写 testData
的愚蠢错误
我的训练数据是这样的:
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)
但是我得到了错误
Error in check.data(data, allow.levels = TRUE) : variable B must have at least two levels.
我该如何解决这个问题?我认为测试数据不需要包含训练数据中的所有级别 - 事实上,即使测试数据只有一个实例,也不应该可以预测吗?
由于您的变量都被编码为 factor
它们 "have" 一个因子水平列表。当您创建 training
时,您在 B 列中有 1
和 2
,并且因子水平(隐含地,在后台)设置为 c(1
, 2
).但是,当您创建 testData
时,您在 B 列中只有 1
,并且因子水平(隐含地,在后台)设置为仅 1
.
我们可以通过明确声明 testData$B
具有级别 c(1, 2)
来解决此问题,即使数据中仅出现 1
。
testData$B <- factor(testData$B, levels=c(1, 2))
编辑:
修复了我写 training
而我完全打算写 testData