7

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

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

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

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

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

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

4

1 回答 1

4

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

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

一些推荐的解决方案:

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

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

于 2013-09-20T16:17:47.103 回答