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