【问题标题】:How to auto-exclude unseen new factor levels in predict.randomForest?如何自动排除 predict.randomForest 中看不见的新因子水平?
【发布时间】:2015-12-25 07:48:46
【问题描述】:

我正在使用ramdomForest 包来创建随机森林模型。 5 月的数据集非常庞大,对 200 多个变量进行了超过一百万次的观察。在使用样本数据训练随机森林时,我无法捕获所有变量的所有因子水平。

因此,在使用 predict() 对验证集进行预测时,它会引发错误,因为存在未在训练数据中捕获的新因子水平。

一种解决方案是确保训练数据变量包含所有因子水平。但事实证明这是非常乏味的,我并不需要所有因子水平。

在 randomForest 包中运行 predict() 时,是否存在一种方法可以自动排除验证集中包含先前未识别因子水平的观察结果?可以在 CRAN 文档中找到任何论据。我不认为我可以为这个做一个可重复的例子。

【问题讨论】:

  • 但是你怎么能预测训练中不存在的水平呢?
  • 我不介意排除一些频率非常低的水平的观察。我可以在预测时忽略这部分数据。

标签: r random-forest r-factor


【解决方案1】:

一种解决方案是结合训练和测试矩阵,并在组合矩阵上使用 as.factor。然后再次分成训练和测试。我在随机森林中遇到过同样的问题,这个解决方案对我有用。

例如:

   combine <- rbind(Train,Test)
   combine$var1 <- as.factor(combine$var1)

   ##Then split into Test and Train
   Train$var1 <- combine[1:nrow(train)]

   similar for Test.

希望这会有所帮助!

【讨论】:

  • 好的,这现在可以工作了,因为它在训练时消除了持续的错误。但它仍然可以预测包含新因子水平的变量的观察值(如果这些水平不在训练集中,这有什么意义?或者randomForest() 是否有处理新因子水平的内部方法?)
  • 有多少变量有这个新因素在验证中的问题?如果太多,那么我会认为训练数据不能很好地表示整个数据。也许您可能想尝试分层抽样。排除观察,如果太多可能会导致模型失去预测能力。在 Stats Exchange 上发布此问题。
  • 所有变量都有问题,但低频因素水平出现在不到 5% 的所有观察中......清理所有数据仍然是一项艰巨的工作......但你的方法似乎适用于一个开始。我想我应该为randomForest() 发布一个新问题,以预测具有新因子水平的观察结果......
  • 来自一个单独的线程,同样的问题。 stackoverflow.com/questions/4285214/…
  • 在现实世界中,使用动态数据,可能无法形成包含所有可能级别的数据集;在这种情况下,预测变得脆弱,而上面的 Amrita 链接是可行的方法 - 我建议将其添加到她的答案中作为“案例 b)”。
猜你喜欢
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
相关资源
最近更新 更多