2012-04-05 190 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