随机森林和长向量的问题

14

我正在对一个包含8个数字列(预测变量)和1个类别列(结果变量)的数据集运行随机森林算法。该数据集中有120万行数据。当我执行以下代码时:randomForest(outcome.f ~ a + b + c + d + e + f + g + h,data=mdata)),出现了错误:

"Error in randomForest.default(m, y, ...) : 
 long vectors (argument 26) are not supported in .Fortran"

有没有什么方法可以防止这种情况发生?我不明白为什么该程序包(显然)试图分配一个长度为2^31-1的向量。我正在使用Mac OS X 10.9.2,并且使用Intel Core i7(如果架构很重要的话)。

会话信息

R version 3.1.0 (2014-04-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] randomForest_4.6-7

loaded via a namespace (and not attached):
[1] tools_3.1.0

1
你解决了吗?(我也遇到了同样的问题...) - SOUser
5个回答

7

不要在训练集上使用过多的行来运行随机森林。

rf1 <- randomForest(Outcome ~ ., train[1:600000,], ntree=500, norm.votes=FALSE, do.trace=10,importance=TRUE)
rf2 <- randomForest(Outcome ~ ., train[600001:1200000,], ntree=500, norm.votes=FALSE, do.trace=10,importance=TRUE)
rf.combined <- combine(rf1,rf2)

如果仍然出现错误,请尝试减少训练集的大小(例如500000或100000),将其分成rf1、rf2和rf3,然后再合并它们。希望这可以帮助解决问题。

1
为什么?你能提供更多细节吗? - smerllo
因为我们在正常情况下运行R时有内存限制,除非我们进行调整。 - dhany1024

2

我之前也遇到过这个问题,解决方法是使用 proximity = FALSE。这样就不会计算接近度矩阵,R 就能够完成处理。

需要翻译的内容:

我之前也遇到过这个问题,解决方法是使用 proximity = FALSE。这样就不会计算接近度矩阵,R 就能够完成处理。


1

您也可以减少树的数量(ntree)。


0

我刚刚遇到了这个错误,因为我的“y”数据集实际上是NULL,所以请注意检查并确保您的y向量不为空。


0
我认为需要注意的是,如果你使用64位版本的R软件,过大的数据集或树大小会触发一些C语言代码,而这些代码只兼容32位版本。所以,可以通过减小树大小和数据集大小来进行补偿。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接