【问题标题】:Random Forest on large xdf files without reading into a dataframe大型 xdf 文件上的随机森林,无需读入数据帧
【发布时间】:2012-09-09 11:17:06
【问题描述】:

有没有办法在大型(大约 10gb)xdf(revolution R 格式)文件上运行随机森林?显然我可以尝试 rxReadXdf 并将其转换为数据帧......但我的机器只有 8gb 内存,将来我可能会处理更大的数据集。例如,使用 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)

但 randomForest 无法接收“train”(一个 xdf)文件。有没有办法直接在 xdf 上运行随机森林而不读取数据帧?

干杯, agsub

【问题讨论】:

  • 我认为这是不可能的,但我从未使用过 xdf 文件。相反,我会尝试将数据分成更小的块,在这些块上训练随机森林,并在所有块组合的最佳特征上构建最终模型。不过这很麻烦。
  • 是的,这可能就是我现在要走的路
  • 它的好处是,如果数据分析很容易,我就不会有工作:)

标签: r random-forest


【解决方案1】:

不,如果不更改 randomForest 包基础的 R 代码,即使这样也可能是不可能的,因为作为 RF 方法基础的 FORTRAN 例程可能需要将所有数据保存在内存中.一般来说,最好为您的机器获取更多 RAM 堆栈或找到一些更大的工作站/机器集群来运行此问题。

(为什么要 1000 个随机森林?)

【讨论】:

  • 我不熟悉 Revolution 文件格式,但可以对数据的多个子集运行 randomForest,然后将结果组合成一个整体。
  • +1 好点;我打算在我的回答中提出同样的观点,但不确定这是否意味着将所有数据加载到 RAM 中以生成一个子集;鉴于 OP 所说的,即使在他们的机器上也可能无法做到,但首先必须可以创建文件。
  • 是的,我想对我来说最好的方法是拆分数据并进行几次随机森林。 xdf 文件基本上是在 hdd 上创建一个虚拟内存转储,您可以将其视为 R 可以快速访问的虚拟内存。另外,我对我的 qn 进行了更正,尝试运行 1000 棵树,而不是 1000 棵随机森林。谢谢你们的帮助=)
【解决方案2】:

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

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

我知道这可能没有帮助,因为您无法更改给定的代码,但也许您会找到这些算法的在线版本的实现(试试Amir Safar's group

【讨论】:

    【解决方案3】:

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

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

    我使用 SSD 作为驱动器来存储页面文件,可用空间量可以用作内存(以下示例适用于 Windows):

    freespace <- as.numeric(gsub("Total # of free bytes        : ", "", 
       system2('fsutil', 'volume diskfree c:', stdout = TRUE)[1]))/(1024*1024)
    memory.limit(size = freespace*0.9)
    

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 2023-04-04
      • 2015-10-23
      • 2019-08-02
      • 2021-10-10
      • 2021-05-29
      • 2019-05-04
      • 2020-01-16
      • 2020-05-16
      相关资源
      最近更新 更多