如何在缺失(NA)值的情况下在R中构build随机森林?

我想适应一个随机的森林模型,但是当我打电话

library(randomForest) cars$speed[1] <- NA # to simulate missing value model <- randomForest(speed ~., data=cars) 

我得到以下错误

 Error in na.fail.default(list(speed = c(NA, 4, 7, 7, 8, 9, 10, 10, 10, : missing values in object 

我对这个问题的第一反应是没有显示出太多的研究成果,因为“每个人”都知道随机森林不能处理预测variables中的缺失值。 但是经过检查?randomForest我必须承认,这可能是更明确的。

(尽pipeBreiman在文档中链接的PDF文件明确指出缺less的值根本就没有被处理。)

在官方文档中我能看到的唯一明显的线索是na.action参数的默认值是na.fail ,这对于新用户来说可能太神秘了。

无论如何,如果你的预测因子有缺失的值,你基本上有两个select:

  1. 使用不同的工具( rpart很好地处理缺失值。)
  2. 推测缺失的值

毫不奇怪, randomForest软件包有一个function可以做到这一点, rfImpute?rfImpute的文档通过一个使用的基本例子。

如果只有less数情况下缺less值,您也可以尝试设置na.action = na.omit来简单地删除这些情况。

当然,这个答案有点猜测你的问题实际上只是缺less了值。

如果有可能遗漏的值是信息性的,那么你可以input缺失的值,并添加额外的二进制variables(与new.vars<-is.na(your_dataset) ),并检查是否降低错误,如果new.var太大设置为将其添加到your_dataset然后你可以单独使用它, varImpPlotselect有效variables,并将它们添加到your_dataset ,你也可以尝试添加单个variablesyour_dataset计数NAnew.var <- rowSums(new.vars)

这不是绝对的答案,如果缺lessvariables是信息性的会计,他们可以纠正由于不完全的插补程序造成的模型误差的增加。

缺失值是信息性的,然后由于非随机原因而出现,其在社会实验环境中尤其常见。