与 rpart 缓慢收敛

数据挖掘 r 表现
2022-03-08 19:49:51

我正在使用该函数在 R 中构建决策树,该rpart函数在同名库中可用,但是在使用多个功能对数据进行分区时遇到了一些严重的性能问题(我的数据集中大约有 5000 行,并且有问题的特征每个都有大约 30 个唯一值)。运行带有一个功能的 rpart 在几个小时内完成(在大约 250GB 内存的 CentOS 服务器上运行单线程),但是,6 天后,添加了第二个功能的模型尚未完成!

我创建了一种方法来提取通过树新数据所采用的路径(请参阅我的问题/解决方案),这是我在这里的主要动机,但该方法需要一个可以作为对象进行类型转换的party对象。我的一位同事告诉我,他看到使用该ctree函数提高了性能,但它的输出是一个难以理解的 S4 对象,我不知道如何转换。我的问题有两个:

  1. 有谁知道一种方法可以加快rpart我在这里已经完成的速度:clf <- rpart(Y ~ X$var1 + X$var2, rpart.control(maxcompete=1, maxsurrogate=0))
  2. 有谁知道如何将 ctree 对象转换为派对对象?或者,是否有人对 ctree 性能有一致或矛盾的观察?
2个回答

我也遇到过类似的挑战。您可以尝试使用RevolutionR rxDTree 函数,该函数在大型数据集上执行得相当好,并且可以转换为 rpart 对象。

我发现通过指定最小 bin 大小可以实现合理的性能提升rpart.control(minbucket=2)您还可以调整复杂度参数。请注意,两者都可能导致性能不佳。

如果您有 30 个级别的无序因子,那么当您的决策树要进行拆分时,它将查看所​​有组合以决定如何进行拆分。让我们计算一下:

(30 choose 1) + (30 choose 2) + ... + (30 choose 29) + (30 choose 30)

即一个巨大的数字。这是在每次拆分时计算的。我不是这方面的专家,但似乎需要避免无序因子变量。