【问题标题】:randomForest **sometimes** predict()s NA on a training datasetrandomForest **sometimes** predict()s NA on a training dataset
【发布时间】:2019-11-15 20:13:37
【问题描述】:

我从 randomForest 得到了奇怪的行为:我有时会在我的训练数据集上得到预测的 NA!这完全是随机的,看两次运行得到不同的结果!

> rf <- randomForest(formula(rfFormula), data = df2, ntree = 20, keep.forest = TRUE) 
> pr <- predict(rf, type = "response")
> any(is.na(pr))
[1] TRUE
> which(is.na(pr))
1283 
1001 
> 
> rf <- randomForest(formula(rfFormula), data = df2, ntree = 20, keep.forest = TRUE) 
> pr <- predict(rf, type = "response")
> any(is.na(pr))
[1] FALSE
> which(is.na(pr))
named integer(0)

我的数据集中没有 NA:

> any(is.na(df2))
[1] FALSE

那是为什么呢?这是randomForest 中的错误吗?还是与 OOB 预测有关的问题?

1) 请注意,我在公式中使用了 119 个变量。

2) 请注意,我使用predict(rf, type = "response") 而不是predict(rf, df2, type = "response")、that would be a mistake。我需要使用第一种方法来获取 OOB 预测 :-)

【问题讨论】:

  • 第一:你能用这个rf &lt;- randomForest(formula(rfFormula), data = df2, ntree = 20, keep.forest = TRUE, na.action=na.omit)试试你的代码吗?这是为了确保您确实在没有NA 的情况下运行。第二:你有没有超过 53 个类别的分类变量?
  • @joran 是的,就是这样!!!谢谢!具有讽刺意味的是,我实际上将ntree = 20 用于调试目的,以便能够快速调试脚本中的所有错误,并且它实际上生成了一个艰难的错误:-D 设置 ntree = 100 修复了它。 :) 随意发布它作为答案。

标签: r random-forest


【解决方案1】:

这正是@joran 提到的原因。由于树的数量较少(20 棵),有时确实会偶然发生使用一次观察来构建所有 20 棵树的情况,因此没有树可以对该观察进行 OOB(袋外)预测。

设置ntree = 100 修复了它。

PS:具有讽刺意味的是,我实际上将ntree = 20 用于调试目的,以便能够快速调试脚本中的所有错误,它实际上生成了一个新的、非常困难的错误,通常不会出现:- D 所以这就是过于勤奋的结果会适得其反:-)

【讨论】:

    猜你喜欢
    • 2012-07-15
    • 2013-11-27
    • 2013-06-29
    • 1970-01-01
    • 2014-08-07
    • 2019-01-28
    • 1970-01-01
    • 2022-02-10
    • 2020-12-26
    相关资源
    最近更新 更多