R 不读入数据帧的大型xdf文件上的随机林

R 不读入数据帧的大型xdf文件上的随机林,r,random-forest,R,Random Forest,有没有办法在大型(大约10gb)xdf(R格式)文件上运行随机林?显然,我可以尝试rxReadXdf并将其转换为数据帧……但我的机器只有8gb ram,将来可能会处理更大的数据集。例如,使用foreach循环,我想在我的四核机器上运行1000棵树: #'train.xdf" is a 10gb training data set rf<- foreach(ntree=rep(250, 4), .combine=combine, .packages='random

有没有办法在大型(大约10gb)xdf(R格式)文件上运行随机林?显然,我可以尝试rxReadXdf并将其转换为数据帧……但我的机器只有8gb ram,将来可能会处理更大的数据集。例如,使用foreach循环,我想在我的四核机器上运行1000棵树:

#'train.xdf" is a 10gb training data set
rf<- foreach(ntree=rep(250, 4), .combine=combine, 
             .packages='randomForest') %do%
    randomForest(amount2~.,data="train", ntree=ntree, importance=TRUE,
                 na.action=na.omit, replace=FALSE)
#“train.xdf”是一个10gb的训练数据集

rf否,除非更改随机森林包下的R代码,否则可能无法实现,因为rf方法下的FORTRAN例程可能需要将所有数据保存在内存中。通常,最好为您的机器增加一堆RAM或找到一些更大的工作站/运行此问题的计算机群集


(为什么需要1000个随机林?

随机林通常先进行深度训练,即在当前节点上进行训练,然后在子节点上进行递归训练。这需要将整个数据集保存在内存中

为了克服这个限制,我编写了随机森林训练框架来增量处理数据(有时称为“在线”),一次不保存多个条目。这需要树的宽度优先构造,并需要使用在线算法计算纯度统计信息。树的每一级只查看一次数据,因此您的xdf文件不需要存储在内存中,而是将被读取D次,其中D是树的最大深度


我知道这可能没有帮助,因为您无法更改给定的代码,但您可能会发现这些算法在线版本的实现(try)

要克服内存限制,请使用:

max_size_of_pagefiles <- 60000 # in MBs
memory.limit(size = max_size_of_pagefiles)

max\u size\u页面文件的最大大小\u我认为这是不可能的,但我从来没有使用过xdf文件。我会尝试将数据分割成更小的块,在这些块上训练随机林,并根据所有块组合的最佳功能构建最终模型。不过这相当麻烦。是的,这可能是我现在要做的事情的好的一面当然,如果数据分析很容易,我就没有工作了:)我不熟悉Revolution文件格式,但可以对数据的几个子集运行
randomForest
,然后将结果合并到一个集合中。+1很好;我想在我的回答中提出同样的观点,但不确定这是否意味着将所有数据加载到RAM中以生成一个子集;根据OP的说法,即使在他们的机器上也不可能这样做,但首先必须能够创建文件。是的,我想对我来说最好的方法是分割数据并进行几次随机林。xdf文件基本上会在hdd上创建一个虚拟内存转储可以将其视为R可以快速访问的虚拟内存。此外,我对我的qn进行了更正,尝试运行1000棵树,而不是1000棵随机森林。谢谢你们的帮助伙计们=)
freespace <- as.numeric(gsub("Total # of free bytes        : ", "", 
   system2('fsutil', 'volume diskfree c:', stdout = TRUE)[1]))/(1024*1024)
memory.limit(size = freespace*0.9)