关于在大型数据集上运行随机森林的建议

机器算法验证 r 随机森林 大数据 计算统计
2022-03-17 08:47:00

我计划运行随机森林来预测二元结果。我有一个相对(从我的角度来看)大的数据集,由 500,000 个单元和大约 100 个特征(连续、二元和分类变量的混合)组成。rf打算caretR.

我曾经在我的个人笔记本电脑或小型 AWS-EC2 上对较小的数据集运行随机森林。关于如何在计算能力方面有效运行它的任何建议?例如,

  • 如果我选择 AWS-EC2 服务器,我应该使用哪一个?
  • 我应该考虑使用SparkR(R 上 Spark 的前端)吗?
  • 我应该考虑并行计算吗?
  • 我应该期望算法在多长时间内获得解决方案?

太感谢了!:)

2个回答

一些提示:

  • 即使在普通笔记本电脑上,500k 行和 100 列也不会给加载和准备带来问题。不需要像 spark 这样的大数据工具。Spark 适用于数亿行的情况。
  • 良好的随机森林实现ranger(如caret)是完全并行的。核心越多越好。
  • 随机森林不能很好地扩展到大数据。为什么?他们的基本想法是汇集很多非常深的树。但是种植深树会消耗大量资源。使用类似的参数max.depth有助于num.trees减少计算时间。不过,它们并不理想。在您的情况下,使用普通笔记本电脑可能 20 分钟ranger就足够了。(粗略的猜测)。
    library(ranger)
    n <- 500000
    p <- 100
    df <- data.frame(matrix(rnorm(n * p), ncol = p))
    df$y <- factor(sample(0:1, n, TRUE))
    object.size(df) # 400 MB

    head(df)

    fit <- ranger(y ~ ., 
                  data = df, 
                  num.trees = 500,
                  max.depth = 8,
                  probability = TRUE)
    fit

在此处输入图像描述

使用更高max.depth的 ,将需要相当多的额外时间。

答案已经在另一个答案(+1)中给出,您描述的数据集并没有那么大,不需要任何专门的软件或硬件来处理它。我唯一要补充的是,您宁愿不要使用 Spark您可以检查这些基准,Spark“速度较慢且内存占用较大”,对于某些版本的 Spark“随机森林与其他方法相比预测准确度较低”,因此基本上,随机森林的 Spark 实现很差。