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的因子。
Answers:
我对这个问题的最初反应是,它没有进行太多的研究工作,因为“每个人”都知道随机森林不会处理预测变量中的缺失值。但是经过检查,?randomForest
我必须承认这可能会更加明确。
(尽管,文档中链接的Breiman PDF确实明确指出,根本不处理缺少的值。)
我可以看到的官方文档中唯一明显的线索na.action
是na.fail
,该参数的默认值为,对于新用户而言可能太神秘了。
无论如何,如果您的预测变量缺少值,则(基本上)有两个选择:
rpart
很好地处理缺失值。)毫不奇怪,randomForest
程序包具有执行此功能的功能rfImpute
。本文档?rfImpute
提供了一个基本用法示例。
如果只有少数案例缺少值,则您也可以尝试设置na.action = na.omit
以简单地删除这些案例。
当然,这个答案有点猜测您的问题确实只是缺少值。
WIN ~ .
OP的第一个参数是什么意思吗?当然,这不是问这个问题的最佳地点,但想知道您是否会知道。谢谢。
随机森林包所基于的布雷曼随机森林实际上可以处理预测变量中的缺失值。在randomForest包中,您可以设置
na.action = na.roughfix
它将首先使用中位数/众数作为缺失值,但随后将生长一个森林并计算邻近度,然后使用这些新填充的值进行迭代并构造一个森林,等等。randomForest文档(p10)中对此没有很好的解释。它只说
.... NA被列中位数代替....这被用作随机森林插补缺失值的起点
在Breiman的主页上,您可以找到更多信息
missfill = 1,2对训练集(如果等于1)进行缺失值的快速替换,对训练集(如果等于2)进行更仔细的替换。
仅在训练集上使用具有k次迭代的接近度,将mfixrep = k与missfill = 2进行k替换的速度较慢,但通常更有效。(要求nprox> 0)。
如果缺少的值有提供信息的可能性,则可以输入缺少的值并添加其他二进制变量(使用new.vars<-is.na(your_dataset)
),并检查它是否降低了错误;如果new.var
设置的值太大而无法添加,your_dataset
则可以单独使用它,并选择带有varImpPlot
并加入他们your_dataset
,你也可以尝试添加单个变量your_dataset
,其对数量NA
的new.var <- rowSums(new.vars)
这不是题外话的答案,如果缺少的变量可以提供信息,因为仅由于不完善的插补程序,它们就可以纠正模型误差的增加。
缺失值具有参考价值,然后由于非随机原因而产生,这在社会实验环境中尤为常见。