无论如何,在测试集中存在新的因子水平时,R是否可以“优雅地”忽略通常会完全破坏预测的错误?通常情况下,如果只有1个不良值,则整个操作将无法进行

这样,只要有有效值,就可以进行预测,但是当存在新的因子水平时,会发生错误吗?

例子很糟糕,但是...这就是我要说的

  library(randomForest)
  df=mtcars
  df$vs=99
  df[1,8]=0  # vs column
  df$vs=factor(df$vs)
  mtcars$vs=factor(mtcars$vs)

  fit=lm(mpg~., data=mtcars)
   # fit above works with explanation given below, but fit2 fails with randomforest?  why?
  fit2 = randomForest(mpg~., data=mtcars)
   df$help=predict(fit, df)   #  first row should work others should error gracefully maybe with a NA?

我得到的第一反应非常好。但是,对于上面的randomForest来说,它对于一个简单程度较低的示例仍然失败。

最佳答案

您可以在预测时使用tryCatch返回NA

对于单行:

tryCatch(predict(fit, bad_df[1,]),
                           error=function(e) NA))

对于所有行:
sapply(1:nrow(bad_df),
           function(i)
               tryCatch(predict(fit, bad_df[i,]),
                           error=function(e) NA))

另一种方法是更改​​您的数据集。基本上,数据集中与fit对象不匹配的因素设置为NA:
for(i in 1:length(fit$xlevels)) {
  bad_values = which(!(bad_df[,names(fit$xlevels)[i]] %in% fit$xlevels[[i]]))
  bad_df[, bad_values] = NA
}

07-24 09:52