【问题标题】:Does random forest in R have a limitation of size of training data?R中的随机森林是否有训练数据大小的限制?
【发布时间】:2013-06-07 19:03:51
【问题描述】:

我正在使用具有 114954 行和 135 列(预测变量)的训练数据训练随机森林。我收到以下错误。

model <- randomForest(u_b_stars~. ,data=traindata,importance=TRUE,do.trace=100, keep.forest=TRUE, mtry=30)

Error: cannot allocate vector of size 877.0 Mb
In addition: Warning messages:
1: In randomForest.default(m, y, ...) :
The response has five or fewer unique values.  Are you sure you want to do regression?
2: In matrix(double(nrnodes * nt), ncol = nt) :
Reached total allocation of 3958Mb: see help(memory.size)
3: In matrix(double(nrnodes * nt), ncol = nt) :
Reached total allocation of 3958Mb: see help(memory.size)
4: In matrix(double(nrnodes * nt), ncol = nt) :
Reached total allocation of 3958Mb: see help(memory.size) 
5: In matrix(double(nrnodes * nt), ncol = nt) :
Reached total allocation of 3958Mb: see help(memory.size)

我想知道我该怎么做才能避免这个错误?我应该用更少的数据训练它吗?但这当然不好。有人可以提出一个替代方案,我不必从训练数据中提取更少的数据。我想使用完整的训练数据。

【问题讨论】:

  • 您的数据太大而无法放入内存。因此:1) 购买内存,2) 将数据拆分并训练多个模型,最终预测可以计算为所有模型输出的平均值(在按专业投票分类的情况下)。
  • 对于大型数据集,h20 显然是要走的路,r-bloggers.com/benchmarking-random-forest-implementations,您也可以从 R 中将它与 library(h2o) 一起使用
  • 或者 xgboost,你也可以从 R 和 library(xgboost) 中使用它

标签: r machine-learning random-forest


【解决方案1】:

正如对上一个问题的回答(我现在找不到)中所述,增加样本量会以非线性方式影响 RF 的内存需求。不仅模型矩阵更大,而且每棵树的默认大小(基于每片叶子的点数)也更大。

要在给定内存限制的情况下拟合模型,您可以执行以下操作:

  1. nodesize 参数增加到比默认值更大的值,对于回归 RF,默认值是 5。有了 114k 次观察,您应该能够在不影响性能的情况下显着提高这一点。

  2. 使用 ntree 参数减少每个 RF 的树数。安装几个小型 RF,然后将它们与 combine 组合以生成整个森林。

【讨论】:

    【解决方案2】:

    如果您不能使用具有更多内存的机器,您可以尝试的另一种选择是:在数据子集(例如 10 个单独的子集)上训练单独的模型,然后以合理的方式组合每个模型的输出(最简单的做到这一点的方法是平均 10 个模型的预测,但还有其他方法可以集成模型 http://en.wikipedia.org/wiki/Ensemble_learning)。

    从技术上讲,您可以在不达到内存限制的情况下使用所有数据,但根据生成的数据子集的大小,生成的模型可能太弱而无法使用。

    【讨论】:

    • 随机森林的好处之一是您不需要对数据进行切片以适应简化模型。因为 RF 只是独立树的集合,所以您可以将较少数量的树适合整个数据集,而不是将固定数量的树适合数据的子集。合并各个子森林后,您就可以回到完整的森林,而不会丢失任何信息。
    • @HongOoi 这似乎是一个很好的策略,你能提供更详细的例子来说明如何使用它吗?
    猜你喜欢
    • 2019-07-20
    • 2021-03-21
    • 2017-01-22
    • 2021-07-06
    • 2018-06-13
    • 2012-10-25
    • 1970-01-01
    • 2021-10-10
    • 2013-08-30
    相关资源
    最近更新 更多