【问题标题】:R random forest : data (x) has 0 rowsR随机森林:数据(x)有0行
【发布时间】:2014-05-01 18:52:39
【问题描述】:

我正在使用 randomForest 包中的 randomForest 函数来查找最重要的变量: 我的数据框称为城市,我的响应变量是数字的收入。

urban.random.forest <- randomForest(revenue ~ .,y=urban$revenue, data = urban, ntree=500,    keep.forest=FALSE,importance=TRUE,na.action = na.omit)

我收到以下错误:

Error in randomForest.default(m, y, ...) : data (x) has 0 rows

在源代码上它与x变量有关:

n <- nrow(x)
p <- ncol(x)
if (n == 0) 
stop("data (x) has 0 rows")

但我不明白x 是什么。

【问题讨论】:

  • 您正在混合使用公式和默认方法。如果您将公式传递给randomForest,则不应再次传递y 值,因为该函数假定公式是x 值并且出现问题。
  • 我删除了 y=urban$revenue 但错误仍然存​​在:randomForest.default(m, y, ...) 中的错误:数据 (x) 有 0 行
  • 我还有一个新错误:此外:警告消息:在 randomForest.default(m, y, ...) 中:响应具有五个或更少的唯一值。您确定要进行回归吗?虽然我的响应变量有 58 个唯一值 length(unique(urban$revenue))# ==58
  • 错误可能出在您的数据中,因为您的行与 iris data urban.random.forest &lt;- randomForest(Species ~ ., data=iris, ntree=500, keep.forest = FALSE,importance = TRUE, na.action = na.omit) 配合得很好

标签: r random-forest


【解决方案1】:

我解决了这个问题。我有一些列,它们的所有值都是 NA 或相同的。我放下它们,一切顺利。我的列类是字符、数字和因子。

 candidatesnodata.index <- c()
 for (j in (1 : ncol(dataframe)))   {

   if (    is.numeric(dataframe[ ,j])  &  length(unique(as.numeric(dataframe[ ,j]))) == 1      )
     {candidatesnodata.index <- append(candidatesnodata.index,j)}
                                }

dataframe <- dataframe[ , - candidatesnodata.index]

【讨论】:

    【解决方案2】:

    我也遇到过类似的问题,原因是我传入的是字符串版本的调用

    y ~ x1 + .... xn
    

    到 randomForest 调用的公式参数。简单的解决方法是将输入转换为 as.Formula()。

    我希望这可以节省任何人的时间!

    【讨论】:

      猜你喜欢
      • 2019-05-04
      • 1970-01-01
      • 2018-03-11
      • 2016-11-28
      • 2019-07-20
      • 2020-10-20
      • 2012-12-15
      • 2021-10-12
      • 2016-06-24
      相关资源
      最近更新 更多