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

时间:2013-09-09 19:11:15

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

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

我可以想到两个影响计算速度的主要问题

  1. 使用整个数据集在每个步骤计算拆分。我会很高兴看到根据数据的随机子集选择变量在每个节点上拆分的结果,只要它继续补充树中每个子节点的样本大小。
  2. 操作未并行化。在我看来,只要树首次拆分,它就应该能够使用两个处理器,这样当我的机器中的每个处理器有16个分裂时,它们就会被使用。在实践中,似乎只有一个被使用。
  3. 有没有人对替代树实现提出建议,这些实现对大型数据集更有效,或者我可以改变以使计算更快的事情**?

    *我正在使用mob(),因为我想在每个节点的底部进行线性回归,根据对治疗变量的响应来分割数据。

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

1 个答案:

答案 0 :(得分:4)

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

有一种说法是,没有简单的方法来处理具有大量类别的分类预测变量。此外,我知道决策树和随机森林会自动选择拆分具有大量类别的分类预测变量。

一些推荐的解决方案:

  • 将您的分类预测器分成更少的箱子(对您来说仍然有意义)。
  • 根据手段订购预测器(幻灯片20)。这是我教授的建议。但是,我会在ordered factor
  • 中使用R
  • 最后,您需要注意这个分类预测器的影响。例如,我知道您可以对randomForest包执行的一项操作是将randomForest参数mtry设置为较小的数字。这将控制算法为每个拆分查看的变量数。当它设置得更低时,您的分类预测变量的实例将显示为与其余变量相比较少。这将加快估计时间,并允许使用randomForest方法的去相关优势,确保您不会过度填充分类变量。

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