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

Rob*_*lly 7 parallel-processing regression r large-data cart-analysis

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

我可以想到两个主要问题是减慢计算速度

  1. 使用整个数据集在每个步骤计算拆分.我会对基于数据的随机子集选择变量在每个节点上拆分的结果感到满意,只要它继续补充树中每个子节点处的样本大小即可.
  2. 该操作未并行化.在我看来,只要树首次拆分,它就应该能够使用两个处理器,这样当我的机器中的每个处理器有16个分裂时,它们就会被使用.在实践中,似乎只有一个被使用.

有没有人对替代树实现提出建议,这些实现对大型数据集更有效,或者我可以改变以使计算更快的事情**?

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

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

Sta*_*onk 4

我的回答来自我参加的使用这些幻灯片的课程(参见幻灯片 20)

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

推荐几个解决方案:

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

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