【问题标题】:Handling skip in rpart and random forest处理 rpart 和随机森林中的跳过
【发布时间】:2021-12-08 22:19:31
【问题描述】:

我有一个包含 10 个分类变量的数据集。其中每一个都有缺失值,编码为 (-9, -6, -3, -2, -1)。我想创建 1 列取这 10 个变量的平均值,不包括负值。我可以将负值折叠到 NA 中,然后对它们进行中值估算,但我需要保留 -6,因为 -6 意味着该人跳过了这个问题,因为它不适用于他们。例如,父母关系质量不适用于单亲父母。我最终想在我的随机森林模型中使用这个变量作为预测变量,所以我不确定在这种情况下如何处理 -6。我能想到的一种方法是将 10 个变量中的每一个进行如下估算(假设 10 个变量是 a1 到 a10):

missing_categs <- c(-9, -3, -2, -1)

df[df$a1%in%missing_categs,]$a1 <- assign median value of a1

经过上述步骤,我计算了 a1 到 a10 的平均值。产生“-6”的那些是属于单亲父母的(这意味着它不适用于他们)。然后,我将 -6 转换为 NA。所以,现在我有平均值和一个 NA。 rpart 和随机森林模型可以处理 NA 吗?其他更好的替代解决方案是最受欢迎的。提前致谢!

【问题讨论】:

    标签: r random-forest


    【解决方案1】:

    rpart 和随机森林模型可以处理 NA 吗?

    我不知道你说的句柄是什么意思。如果您的意思是您可以在预测变量中使用NA,那么rpart 的答案是

    > library(rpart)
    > df <- data.frame(c(1, 2, NA), c(4, 5, 6))
    > rpart(df, na.action=na.pass)
    n= 3 
    
    node), split, n, deviance, yval
          * denotes terminal node
    

    但是对于randomForest没有

    > library(randomForest)
    randomForest 4.6-14
    Type rfNews() to see new features/changes/bug fixes.
    > df <- data.frame(c(1, 2, NA), c(4, 5, 6))
    > randomForest(df, na.action=na.pass)
    Error in randomForest.default(df, na.action = na.pass) : 
      NA not permitted in predictors
    
    

    如果您的意思是处理他们能够以某种方式处理,例如通过给他们一个功能,那么答案是两者都可以

    rpartrandomForest 具有可以使用的参数 na.action。请参阅here for rparthere for randomForest

    rpartna.action 的默认值是 na.rpart,它会删除“所有缺少 y 的观测”“缺少一个或多个预测变量的观测” 被保留。

    randomForestna.action 的默认值是 na.fail,如果没有找到 NA,则返回给定的数据结构不变,如果找到至少一个 NA,它 “表示错误”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 2016-12-12
      • 2015-08-18
      • 2018-01-18
      • 2018-02-25
      相关资源
      最近更新 更多