在 R 中的大型数据集上运行回归树

标签 r parallel-processing regression cart-analysis large-data

我正在处理一个包含大约 150 万个观测值的数据集。我发现在超过一小部分数据上运行回归树(我正在使用 mob() * 包中的 party * 函数)花费的时间非常长(我无法在超过50k 观察)。

我能想到两个导致计算速度变慢的主要问题

  • 使用整个数据集在每一步计算拆分。我会对根据数据的随机子集选择要在每个节点拆分的变量的结果感到满意,只要它继续补充树中每个子节点的样本大小。
  • 操作没有被并行化。在我看来,一旦树进行了第一次拆分,它就应该能够使用两个处理器,这样到我的机器中的每个处理器都可以使用 16 个拆分时。在实践中,似乎只有一个被使用。

  • 有没有人对更适合大型数据集的替代树实现或我可以更改以使计算更快**的内容提出建议?

    * 我正在使用 mob() ,因为我想在每个节点的底部拟合线性回归,根据它们对处理变量的响应来拆分数据。

    ** 似乎大大减慢计算速度的一件事是我有一个包含 16 种类型的因子变量。计算要拆分的变量子集似乎比其他拆分需要更长的时间(因为有很多不同的方法可以对它们进行分组)。这个变量是我们认为很重要的变量,所以我不愿意完全放弃它。在将类型放入树模型之前,是否有推荐的方法将类型分组为较少数量的值?

    最佳答案

    我的回答来自我上过的一门课,该课使用过 these slides (see slide 20) .

    那里的说法是没有简单的方法来处理具有大量类别的分类预测变量。此外,我知道决策树和随机森林会自动更喜欢在具有大量类别的分类预测变量上进行拆分。

    几个推荐的解决方案:

  • 将您的分类预测器分成更少的箱(对您仍然有意义)。
  • 根据平均值对预测器进行排序(幻灯片 20)。这是我教授的建议。但它会引导我使用 ordered factorR
  • 最后,您需要注意此分类预测变量的影响。例如,我知道您可以使用 randomForest 做一件事。包是设置randomForest参数 mtry到一个较低的数字。这控制了算法为每个拆分查找的变量数量。当它设置得较低时,与其他变量相比,出现的分类预测变量的实例会更少。这将加快估计时间,并允许来自 randomForest 的去相关优势。方法确保您不会过度拟合您的分类变量。

  • 最后,我建议查看 MARS 或 PRIM 方法。我的教授 has some slides on that here .我知道 PRIM 以计算要求低而闻名。

    关于在 R 中的大型数据集上运行回归树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18709291/

    相关文章:

    r - bsplus : Carousel for dynamic number of plots in Shiny

    c++ - 通过乱序执行并行化我的自定义编译器

    parallel-processing - 无状态系统和有状态系统之间有什么区别,它们如何影响并行性?

    python - 使用 scikit-learn 预测给定 "x"的数据向量 "y"?

    r - nls() 的后续步骤?

    r - 多项选择题最低零分的 Moodle 考试

    r - 在ftable中添加列和行总计

    r - 从R中的主题ID重新采样

    c - 如何使用并行计算机 (MPI) 进行矩阵乘法

    python - R 和 Python 的不同多项式回归系数