2012-04-05 154 views
5

我想在R(1M +行乘6列)中使用大数据集来训练随机森林(使用randomForest包)以实现回归。不幸的是,当试图一次完成所有事情时,我会得到一个Error in matrix(0, n, n) : too many elements specified错误,并且在运行数据子集时不能分配足够的内存种类 - 可能低至10,000个观察值。大数据集上的随机森林

看到没有机会我可以在我的机器上添加更多内存,并且随机森林非常适合我尝试建模的过程类型,我非常希望能够完成这项工作。

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

+0

建议使用'proximity = FALSE'作为[joran](http://stackoverflow.com/users/324364/joran)并告诉我们它是否有效。 – smci 2012-10-29 07:03:14

+0

围绕你的问题的一个相对简单的方法是将子集输入矩阵。所有这些数据可能不会给你一个比10K×10K的子集更好的模型。 – 2015-01-15 10:31:41

+1

你看过图书馆(h2o)吗?这对于非常大的问题运行正常,请参阅http://www.r-bloggers.com/benchmarking-random-forest-implementations/ – 2015-08-20 18:50:37

回答

11

您可能会要求randomForest为数据创建接近矩阵,如果您仔细考虑,将会是疯狂地大:100万x100万。无论您设置多么小,均需要这种大小的矩阵sampsize。事实上,只是谷歌搜索错误消息似乎证实了这一点,因为包装作者states,发现n,n)整个源代码中的唯一位置是计算邻近度矩阵。

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

+0

我有点得出了相同的结论,但似乎不明白为什么它是必要的,如果有一些培训RF的方法,而不需要它。 – ktdrv 2012-04-06 04:10:16

+1

我不确定你的意思。设置proximity = FALSE将防止计算他的近似值。 – joran 2012-04-06 04:15:01

+0

我只是做了一个测试,实际上森林本身就是巨大的。在我的特定测试案例中,'keep.forest = F'产生14MB的结果,而'proximity = FALSE'没有任何区别,结果是232 MB。 – Wayne 2014-11-12 22:25:04

1

我建议在R中使用bigrfpackage,因为它是针对您遇到的问题类型(即缺少足够的RAM)而设计的。遗憾的是,目前已从CRAN中删除,但它仍在档案中可用(请参阅答案:Can't install bigrf package)。

另一种方法可能涉及基于不同训练数据组合RFs,但结果可能被认为是无意义的(详见答案:Combining random forests built with different training sets in R)。后一篇文章中提到的修改对我来说确实有效,但是我运行的组合射频有时更好,有时甚至比使用单个射频(YMMV)更差。

+0

我可能会误解,但我相信bigrf'package应该可以处理回归。 http://finzi.psych.upenn.edu/library/bigrf/html/bigrf-package。html – neanderslob 2016-11-04 23:38:45

+0

你是对的:我误解了他们的包抽象。编辑我原来的答案。谢谢! – Prophet60091 2016-12-04 16:34:32