Skip to content

将随机森林(random forest)压缩为决策树(decision tree)

Condense Random Forest into a Decision Tree

有一种有趣的技巧,可以用它把一整个随机森林模型压缩成一棵决策树。

ds p249 1

好处是什么?这项技术可以:

  • 缩短预测(prediction)的运行时间。
  • 提升可解释性。
  • 降低内存占用。
  • 简化模型。
  • 保留随机森林模型的泛化能力。

让我们在本章中一探究竟。

让我们在下面的虚拟数据集上拟合一个决策树模型。它产生的决策区域图如右侧所示。

ds p250 1

很明显,这里存在严重的过拟合(overfitting)。事实上,我们必须注意,默认情况下,决策树总是能 100% 地过拟合任意数据集(我们稍后会用到这一点)。这是因为它总是被允许一直生长,直到所有样本都被正确分类。这个过拟合问题可以由随机森林模型来解决,如下图所示:

ds p250 2

这一次,决策区域图表明我们并没有一个复杂的决策边界。测试准确率也有所提升(从 69.5% 提升到 74%)。现在,我们可以做一件有趣的事。我们知道随机森林模型已经学到了一些能在未见数据上泛化的规则。那么,我们何不根据随机森林模型在训练集上生成的预测来训练一棵决策树呢?

ds p251 1

更具体地说,给定一个数据集 (X, y):

  • 训练(train)一个随机森林模型。它会从训练集中学到一些规则,这些规则有望在未见数据上泛化(得益于装袋(bagging))。
  • 在 X 上生成预测,得到输出 y'。这些预测会捕获随机森林模型所学规则的本质。
  • 最后,在 (X, y') 上训练一个决策树模型。这里我们希望故意过拟合这个映射,因为从 (X) 到 (y') 的这个映射是随机森林模型所学规则的一个代理。

这个想法的实现如下:

ds p252 1

用新决策树得到的决策区域图与我们之前看到的随机森林的结果非常相似:

ds p252 2

测量决策树和随机森林模型的测试准确率,我们发现它们也很接近:

ds p253 1

事实上,这种方法还显著降低了运行时间,如下图所示:

ds p253 2

是不是很酷?考虑这样做的另一个理由是它增加了可解释性。这是因为如果随机森林中有 100 棵树,我们根本无法解释它们。然而,如果我们把它压缩成一棵决策树,现在就可以对它进行检查了。

ds p254 1

这是我不久前才想出来的。我也在几个数据集上测试了这种方法,结果令人鼓舞。但仅凭两个案例就下结论并不公平。虽然这个想法在直觉上说得通,但我也明白可能存在一些目前还不明显的潜在缺陷。所以我并不是说你应该立刻采用这项技术。相反,建议你在自己的随机森林用例上测试这种方法。如果你有什么发现,欢迎反馈给我。本章的代码可在此获取:https://bit.ly/3XSPejD。在下一章中,让我们了解一种把决策树转换为可在 GPU 上运行的矩阵运算(matrix operations)的技术。

本站内容仅供学习交流,版权归原作者所有。