首页 文章

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

提问于
浏览
7

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

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

  • 使用整个数据集在每个步骤计算拆分 . 我会对基于数据的随机子集选择变量在每个节点上拆分的结果感到满意,只要它继续补充树中每个子节点处的样本大小即可 .

  • 操作未并行化 . 在我看来,只要树首次拆分,它就应该能够使用两个处理器,这样当我的机器中的每个处理器有16个分裂时,它们就会被使用 . 在实践中,似乎只有一个被使用 .

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

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

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

1 回答

  • 4

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

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

    一些推荐的解决方案:

    • 将您的分类预测器分成更少的箱子(对您来说仍然有意义) .

    • 根据手段订购预测器(幻灯片20) . 这是我教授的建议 . 但它会让我在 R 中使用 ordered factor

    • 最后,您需要注意这个分类预测器的影响 . 例如,我知道您可以对randomForest包执行的一件事是将 randomForest 参数 mtry 设置为较小的数字 . 这将控制算法为每个拆分查看的变量数 . 当's set lower you'l与其他变量相比,您的分类预测变量的实例更少 . 这将加快估计时间,并允许 randomForest 方法的去相关优势,确保您不会过度拟合分类变量 .

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

相关问题