【问题标题】:Running regression tree on large dataset in R在 R 中的大型数据集上运行回归树
【发布时间】:2013-09-13 14:16:32
【问题描述】:

我正在处理一个包含大约 150 万个观测值的数据集。我发现在我的数据的一小部分上运行回归树(我正在使用 party 包中的 mob()* 函数)需要很长时间(我不能在超过50k obs)。

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

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

是否有人对更适合大型数据集的替代树实现或我可以更改以加快计算速度的事情提出建议**?

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

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

【问题讨论】:

  • R 和它的大多数包都不是开箱即用的并行化,所以你对第 2 点是正确的。不幸的是,在你的情况下,如果不对源代码进行重大编辑,你将无能为力party 的代码。

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


【解决方案1】:

我的回复来自我参加的使用these slides (see slide 20) 的课程。

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

几个推荐的解决方案:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 2020-08-12
  • 2014-11-13
  • 2020-03-06
  • 2017-04-20
相关资源
最近更新 更多