R中的随机林对训练数据的大小有限制吗?

R中的随机林对训练数据的大小有限制吗?,r,machine-learning,random-forest,R,Machine Learning,Random Forest,我在我的训练数据上训练randomforest,该数据有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,该数据有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)

model如果不能使用内存更多的机器,可以尝试的一种替代方法是:在数据子集(比如10个单独的子集)上训练单独的模型,然后以合理的方式组合每个模型的输出(最简单的方法是平均10个模型的预测,但还有其他方法来组合模型)


从技术上讲,您可以使用所有数据而不受内存限制,但根据生成的数据子集的大小,生成的模型可能太弱而没有任何用处

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

要适应给定内存限制的模型,可以执行以下操作:

  • nodesize
    参数增加到比默认值大的值,对于回归RF,默认值为5。通过114k的观察,您应该能够在不影响性能的情况下显著提高这一点

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


  • 您的数据太大,无法放入内存。因此:1)购买内存,2)将数据分成几部分并训练几个模型,最终预测可以计算为所有模型输出的平均值(在按主要投票分类的情况下)。对于大型数据集h20显然是一种方法,您也可以从R with library(h2o)或xgboost使用它,您也可以从R with library使用它(xgboost)随机林的一个好处是,您不需要对数据进行切片以适应简化的模型。因为RF只是一个独立树的集合,所以您可以将较少数量的树适应于完整的数据集,而不是将固定数量的树适应于数据的子集。组合单个子林可以让您回到原始数据集完整的森林,没有任何信息丢失。@HongOoi这似乎是一个很好的策略,你能提供更多关于如何使用它的详细示例吗?