使用 randomForest 使 predict 在 R 中指定不良因子水平

Make predict specify bad factor level in R with randomForest

提问人:Hack-R 提问时间:3/4/2015 更新时间:3/31/2015 访问量:85

问:

我在 R 中运行一个模型,其中包含示例验证数据:randomForest

predictions <- predict(rf, newdata = model_final, type = "prob")

显然在某个地方有一个新的因子水平,导致了这个消息:

Error in predict.randomForest(rf, newdata = model_final, type = "prob") : 
  New factor levels not present in the training data

忽略特定于我的数据和模型的所有内容,有没有办法强制指定哪些列是具有新因子水平的列?或者有没有另一种快速的编程方法来识别有问题的列?predict

r

评论


答:

1赞 LyzandeR 3/4/2015 #1

假设训练集和测试集的列顺序相同,只需使用单个 mapply 来识别级别不相同的位置:factor

示例数据

training <- data.frame(a=as.factor(letters), b=letters, stringsAsFactors=F)
test     <- data.frame(a=as.factor(rep(letters[1:20],3)), b=rep(letters[1:20],3), stringsAsFactors=F)

溶液

> mapply(function(x,y) identical(levels(x), levels(y)), training, test )
    a     b 
FALSE  TRUE 

如果上述结果返回 FALSE,则训练集和测试集之间的因子水平之间存在差异。由于它使用数字列、逻辑列或字符列的情况,因此该函数在这两种情况下都返回 NULL,因此返回 TRUE。identicallevelsidentical

假设我明白了您在问题中的意思,只需查找从上述函数返回的 FALSE 列即可。