我想要一个随机的森林模型,但是当我打电话时
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
答案 0 :(得分:111)
我对这个问题的初步反应是它没有显示太多的研究工作,因为“每个人”都知道随机森林不会处理预测变量中的缺失值。但在检查?randomForest
时,我必须承认它可能更明确。
(尽管,文档中链接的Breiman PDF确实明确表示根本没有处理缺失值。)
我能看到的官方文档中唯一明显的线索是na.action
参数的默认值为na.fail
,这对新用户来说可能过于神秘。
在任何情况下,如果你的预测者有缺失值,你(基本上)有两个选择:
rpart
很好地处理缺失值。)毫不奇怪,randomForest
包具有执行此操作的功能rfImpute
。 ?rfImpute
上的文档贯穿其使用的基本示例。
如果只有少数案例缺少值,您也可以尝试设置na.action = na.omit
来删除这些案例。
当然,这个答案有点猜测你的问题实际上只是缺少值。
答案 1 :(得分:3)
如果缺失值有可能提供信息,那么您可以输入缺失值并添加其他二进制变量(使用new.vars<-is.na(your_dataset)
)并检查是否会降低错误,如果new.var
太大而无法添加它可以your_dataset
然后你可以单独使用它,用varImpPlot
选择有意义的变量并将它们添加到your_dataset
,你也可以尝试将单个变量添加到your_dataset
来计算数字NA
的{{1}}
这不是非常难以回答的答案,如果遗漏变量是信息性的,那么它们可以纠正由于不完全的插补程序而导致的模型误差的增加。
缺失值是信息性的,然后由于非随机原因而出现,在社会实验环境中尤其常见。
答案 2 :(得分:0)
Breiman随机森林实际上在预测变量中处理缺失值。在randomForest包中,您可以设置
na.action = na.roughfix
它将首先使用中位数/众数作为缺失值,但随后将生长一个森林并计算邻近度,然后使用这些新填充的值进行迭代并构造一个森林,等等。randomForest {{3} }。它仅说明
.... NA替换为列中位数....这被用作随机森林估算缺失值的起点
在Breiman的documentation (p10)上,您会发现更多信息
missfill = 1,2对训练集(如果等于1)进行缺失值的快速替换,对训练集(如果等于2)进行更仔细的替换。
mfixrep = k与misfill = 2相比,仅使用训练集上进行k次迭代的邻近替换速度较慢,但通常更有效。 (需要nprox> 0)。