【问题标题】:Random forest on a big dataset大数据集上的随机森林
【发布时间】:2012-04-19 16:52:07
【问题描述】:

我在 R 中有一个大型数据集(1M+ 行 x 6 列),我想用它来训练随机森林(使用 randomForest 包)以进行回归。不幸的是,我在尝试一次完成整个事情时遇到Error in matrix(0, n, n) : too many elements specified 错误,并且在数据子集上运行时无法分配足够的内存类型的错误 - 低至 10,000 左右的观察.

看到我不可能在我的机器上添加更多 RAM 并且随机森林非常适合我尝试建模的进程类型,我真的很想完成这项工作。

非常感谢任何建议或解决方法的想法。

【问题讨论】:

  • 按照joran 的建议使用proximity = FALSE 运行并告诉我们它是否有效。
  • 解决问题的一种相对简单的方法是对输入矩阵进行子集化。所有这些数据可能不会为您提供比大小为 10K x 10K 的模型更好的模型。
  • 你看过 library(h2o) 吗?对于非常大的问题,这运行正常,请参阅r-bloggers.com/benchmarking-random-forest-implementations

标签: r machine-learning random-forest


【解决方案1】:

您可能要求randomForest 为数据创建邻近矩阵,如果您考虑一下,它将疯狂大:100 万 x 100 万。无论您设置多小sampsize,都需要这个大小的矩阵。事实上,简单地谷歌搜索错误消息似乎证实了这一点,因为包作者states 在整个源代码中找到n,n) 的唯一位置是计算邻近矩阵。

但很难提供更多帮助,因为您没有提供有关您正在使用的实际代码的详细信息。

【讨论】:

  • 我得出了同样的结论,但似乎不明白为什么需要它,以及是否有某种方法可以在不需要它的情况下训练 RF。
  • 我不确定你的意思。设置接近度 = FALSE 将阻止计算接近度。
  • 我刚刚做了一个测试,实际上是森林本身很大。在我的特定测试用例中,keep.forest=F 的结果为 14MB,而proximity=FALSE 输入或输出没有区别:结果为 232 MB。
  • @Wayne 森林对象本身的大小是一个单独的问题(而不是 OP 询问的问题)。该问题询问了一个特定错误,该错误是由于无法为单个矩阵分配足够的内存而导致的,并且该特定错误的唯一可能来源是邻近矩阵。但是是的,设置keep.forest = FALSE 肯定会大大减小生成对象的大小。
  • 现在我记得当我遇到类似于randomForest 的 OP 问题时:它通过caret 使用randomForest。在某些时候,它想要分配 21 GB——假设 OP 直接运行 randomForest,这不是问题。
猜你喜欢
  • 2021-10-10
  • 2017-07-23
  • 2021-05-29
  • 2020-05-16
  • 2018-09-03
  • 2016-04-04
  • 2019-07-21
  • 2019-08-02
  • 2015-09-16
相关资源
最近更新 更多