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

7
我正在处理大约150万个观测值的数据集。我发现在我的数据子集上运行回归树(我使用party包中的mob()*函数)需要非常长的时间(我不能在超过50k个观测值的子集上运行)。
我可以想到两个主要问题正在拖慢计算速度:
  1. 每一步都使用整个数据集来计算分裂。只要每个节点基于数据的随机子集选择要分裂的变量,并且在树的每个子节点继续补充样本大小,我就满意于选择结果。
  2. 操作没有并行化。看起来一旦树进行了第一次分裂,它就应该能够使用两个处理器,这样当有16次分裂时,我的机器中的每个处理器都将被使用。但实际上似乎只有一个处理器在使用。
是否有任何关于更适合大型数据集的替代树实现或可以加快计算速度的建议?
* 我使用mob(),因为我想在每个节点的底部拟合线性回归,根据它们对待处理变量的响应将数据分割。
** 似乎有一件事让计算速度变慢很多,那就是我有一个有16种类型的因子变量。计算要分裂哪个子集似乎比其他分裂花费更长时间(因为有很多不同的分组方式)。这个变量是我们认为很重要的,所以我不想完全放弃它。在将其放入树模型之前,是否有推荐的方法将类型分组为较少的值?

R及其大部分包默认情况下不支持并行处理,所以您对第二点的看法是正确的。不幸的是,在您的情况下,如果没有对“party”源代码进行重大编辑,您将无法做太多事情。 - Nick Ulle
1个回答

4

我的回答来自我参加的一门课程,使用了这些幻灯片(请参见第20张幻灯片).

幻灯片中的说法是处理具有大量分类类别的预测变量没有简单的方法。此外,我知道决策树和随机森林会自动倾向于分裂分类变量,并且这些分类变量具有大量类别。

几个推荐的解决方案:

  • 将您的分类预测器分成更少的类别(仍然对您有意义)。
  • 按平均值对预测器进行排序(第20页)。这是我的教授的建议。但这会导致我在R中使用有序因子。
  • 最后,您需要小心分类预测器的影响。例如,我知道您可以使用randomForest软件包将randomForest参数mtry设置为较低的数字。这控制算法每次拆分时查看的变量数量。当它被设置为较低时,您将比其他变量更少地出现分类预测器实例。这将加快估计时间,并允许从randomForest方法的去相关性优势确保您不会过度拟合分类变量。

最后,我建议看一下MARS或PRIM方法。我的教授这里有一些幻灯片。我知道PRIM因其低计算要求而闻名。


这是那堂课程的更多幻灯片:[http://www.stat.lsu.edu/faculty/li/teach/exst7152/slides/] - Statwonk
链接已经失效,请您更新一下? - Semzem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接