library(randomForest)
rf.model <- randomForest(WIN ~ ., data = learn)
我想拟合一个随机森林模型,但我收到了这个错误:
Error in na.fail.default(list(WIN = c(2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, :
missing values in object
我的数据框学习了 16 个数字属性,WIN 是一个级别为 0 1 的因素。
library(randomForest)
rf.model <- randomForest(WIN ~ ., data = learn)
我想拟合一个随机森林模型,但我收到了这个错误:
Error in na.fail.default(list(WIN = c(2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, :
missing values in object
我的数据框学习了 16 个数字属性,WIN 是一个级别为 0 1 的因素。
我对这个问题的最初反应是,它没有表现出太多的研究努力,因为“每个人”都知道随机森林不会处理预测变量中的缺失值。但是经过检查?randomForest
,我必须承认,这可能会更加明确。
(尽管,文档中链接到的 Breiman 的PDF确实明确表示根本不处理缺失值。)
我能看到的官方文档中唯一明显的线索是na.action
参数的默认值为na.fail
,这对于新用户来说可能太神秘了。
在任何情况下,如果您的预测变量有缺失值,您(基本上)有两种选择:
rpart
很好地处理缺失值。)毫不奇怪,该randomForest
包具有执行此操作的功能,rfImpute
. 文档?rfImpute
贯穿了其使用的基本示例。
如果只有少数案例有缺失值,您也可以尝试设置na.action = na.omit
为简单地删除这些案例。
当然,这个答案有点猜测你的问题实际上只是缺少值。
randomForest 包所基于的 Breiman 随机森林实际上确实处理了预测变量中的缺失值。在 randomForest 包中,您可以设置
na.action = na.roughfix
它将首先对缺失值使用中值/模式,然后它会生成一个森林并计算近似值,然后使用这些新填充的值等迭代并构建一个森林。这在 randomForest文档 (p10)中没有得到很好的解释。它只说明
.... NA 被列中位数替换 .... 这被用作通过随机森林估算缺失值的起点
在 Breiman 的主页上,您可以找到更多信息
missfill= 1,2 对训练集(如果等于 1)和更仔细的替换(如果等于 2)执行缺失值的快速替换。
mfixrep= k with misfill=2 使用仅在训练集上进行 k 次迭代的近似替换进行较慢但通常更有效的替换。(需要 nprox >0)。
如果缺失值可能提供信息,那么您可以输入缺失值并添加额外的二进制变量(使用new.vars<-is.na(your_dataset)
)并检查它是否降低错误,如果new.var
设置太大而无法添加,your_dataset
那么您可以单独使用它,使用varImpPlot
并将它们添加到your_dataset
,您也可以尝试添加单个变量来your_dataset
计算NA
's 的数量new.var <- rowSums(new.vars)
这不是题外话的答案,如果缺失的变量能够提供信息,则可以纠正仅由于不完美的插补程序而导致的模型误差增加。
缺失值是信息丰富的,然后它们是由于非随机原因而出现的,这在社会实验环境中特别常见。