R中的随机森林是否有训练数据大小的限制?

Ayu*_*ngh 5 r machine-learning random-forest

我在训练数据上训练随机森林,训练数据有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)
Run Code Online (Sandbox Code Playgroud)

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

Hon*_*Ooi 10

正如在前一个问题(我现在无法找到)的答案中所述,增加样本大小会以非线性方式影响RF的存储器要求.不仅模型矩阵更大,而且每棵树的默认大小(基于每叶的点数)也更大.

为了满足您的内存限制,您可以执行以下操作:

  1. nodesize参数增加到大于默认值的值,对于回归RF,该参数为5.通过114k观测,你应该能够在不影响性能的情况下显着提高.

  2. 使用ntree参数减少每个RF的树数.安装几个小RF,然后将它们组合起来,combine生产整个森林.


Art*_*aCo 3

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

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

  • 随机森林的好处之一是您不需要对数据进行切片来适应简化模型。由于 RF 只是独立树的集合,因此您可以将较少数量的树拟合到完整数据集,而不是将固定数量的树拟合到数据子集。组合各个子森林然后让您回到完整的森林,而不会丢失任何信息。 (5认同)