【问题标题】:How to use random forests in R with missing values?如何在 R 中使用缺失值的随机森林?
【发布时间】:2012-01-12 07:35:28
【问题描述】:
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 级的一个因素。

【问题讨论】:

  • 在目前的状态下,这个问题将很难回答。你能用一些示例数据更新你的问题吗?
  • @MattO'Brien 同样有趣的是,问题的质量是基于观看次数而不是问题本身的优点来讨论的。以及答案,因为@Joran 可以毫无问题地弄清楚要问什么,并为提问者的问题提供了一个好的解决方案。

标签: r random-forest


【解决方案1】:

我对这个问题的最初反应是它没有显示出太多的研究工作,因为“每个人”都知道随机森林不会处理预测变量中的缺失值。但是在检查?randomForest 时,我必须承认它可能对此更加明确。

(尽管文档中链接到的 Breiman 的 PDF 确实明确表示根本不处理缺失值。)

我在官方文档中看到的唯一明显线索是na.action 参数的默认值是na.fail,这对于新用户来说可能太神秘了。

无论如何,如果您的预测变量有缺失值,您(基本上)有两种选择:

  1. 使用不同的工具(rpart 可以很好地处理缺失值。)
  2. 估算缺失值

毫不奇怪,randomForest 包有一个功能可以做到这一点,rfImpute?rfImpute 的文档贯穿了其使用的基本示例。

如果只有少数个案有缺失值,您也可以尝试设置 na.action = na.omit 以简单地删除这些个案。

当然,这个答案有点猜测,您的问题实际上只是缺少值。

【讨论】:

  • 你碰巧知道 OP 的第一个参数中的WIN ~ . 是什么意思吗?这当然不是提出问题的最佳场所,但想知道您是否知道。谢谢。
  • 问题是关于响应变量中的缺失值,而不是预测变量。
【解决方案2】:

randomForest 包所基于的 Breiman 随机森林实际上确实处理预测变量中的缺失值。在randomForest包中,可以设置

   na.action = na.roughfix

它将首先使用中值/众数作为缺失值,然后它会生成一个森林并计算近似值,然后使用这些新填充的值等进行迭代和构建一个森林。这在 randomForest documentation (p10) 中没有得到很好的解释。它只说明

....NAs 被替换为列中位数 .... 这被用作随机森林估算缺失值的起点

在 Breiman 的 homepage 上,您可以找到更多信息

missfill= 1,2 对训练集的缺失值进行快速替换(如果等于 1)并进行更仔细的替换(如果等于 2)。

mfixrep= k with misfill=2 使用近似值替换,但通常更有效,仅在训练集上进行 k 次迭代。 (需要 nprox >0)。

【讨论】:

  • 这个答案比接受的答案更具信息性(和礼貌)。 -_-
【解决方案3】:

如果缺失值可能提供信息,那么您可以输入缺失值并添加其他二进制变量(使用 new.vars&lt;-is.na(your_dataset) )并检查它是否降低错误,如果 new.var 设置太大而无法将其添加到 @987654323 @ 然后你可以单独使用它,用varImpPlot 选择重要变量并将它们添加到your_dataset,你也可以尝试将单个变量添加到your_dataset,它计算NAnew.var &lt;- rowSums(new.vars) 的数量

这不是离题的答案,如果缺失的变量能够提供信息,则可以纠正仅由于不完美的插补程序而导致的模型误差增加。

缺失值是信息丰富的,然后它们是由于非随机原因而出现的,这在社会实验环境中特别常见。

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2017-12-04
    • 2019-05-04
    • 2019-01-29
    相关资源
    最近更新 更多