计算精度时因子水平集不同

Level sets of factors are different while calculating accuracy

我建立了一个随机森林模型。预测输出和实际输出是因子。有 19 类 个要预测,但其中一个 类 没有出现在测试数据集中。

然后我想计算模型的准确性,使用这个公式:

accuracy <- sum(ActualOutput==PredictedOutput, na.rm = TRUE) / length(PredictedOutput)

生成此错误消息的原因:

Error in Ops.factor(ActualOutput, PredictedOutput) : level sets of factors are different

ActualOutput 有 19 个级别,PredictedOutput 有 18 个级别。我该怎么办?

如果你将变量转换为字符而不是因子,你会遇到同样的问题吗?你能像那样构建你的模型吗?或者你需要因子类型?

一般来说,这是一个 training/testing 数据集构建问题。有时,当 类 之一的观察结果很少时,您必须确保在训练和测试集中都有一些案例。检查一些分层抽样方法。

你能提供更多关于你用于随机森林模型的包和命令的信息吗?

假设我们有两个长度相同但级别不同的输出 ActualOutputPredictedOutput

PredictedOutput <- factor(c("a", "b", "b"))
ActualOutput <- factor(c("a", "b", "c"))

sum(ActualOutput == PredictedOutput)

Error in Ops.factor(ActualOutput, PredictedOutput) : 
  level sets of factors are different

PredictedOutput 有 2 个级别,但 ActualOutput 有 3 个级别。我们想将 PredictedOutput 的级别设置为 ActualOutput

的级别
PredictedOutput <- factor(PredictedOutput, levels=levels(ActualOutput))

现在PredictedOutput看起来像

[1] a b b
Levels: a b c

你的公式应该有效

sum(ActualOutput == PredictedOutput)
[1] 2

如果您有一个可重现的小例子,我们可能会提供更大的帮助