如何在缺失(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:
- 使用不同的工具(
rpart
很好地处理缺失值。) - 推测缺失的值
毫不奇怪, randomForest
软件包有一个function可以做到这一点, rfImpute
。 ?rfImpute
的文档通过一个使用的基本例子。
如果只有less数情况下缺less值,您也可以尝试设置na.action = na.omit
来简单地删除这些情况。
当然,这个答案有点猜测你的问题实际上只是缺less了值。
如果有可能遗漏的值是信息性的,那么你可以input缺失的值,并添加额外的二进制variables(与new.vars<-is.na(your_dataset)
),并检查是否降低错误,如果new.var
太大设置为将其添加到your_dataset
然后你可以单独使用它, varImpPlot
select有效variables,并将它们添加到your_dataset
,你也可以尝试添加单个variablesyour_dataset
计数NA
的new.var <- rowSums(new.vars)
这不是绝对的答案,如果缺lessvariables是信息性的会计,他们可以纠正由于不完全的插补程序造成的模型误差的增加。
缺失值是信息性的,然后由于非随机原因而出现,其在社会实验环境中尤其常见。