如何在随机森林中调整超参数

机器算法验证 机器学习 Python 优化 随机森林 超参数
2022-03-20 07:16:09

我不知道应该如何调整超参数:我的模型(随机森林)的“最大深度”和“树数”。

我使用 Python,我刚刚发现了网格搜索,但我不知道我应该首先使用哪个范围。

由于我的计算机能力有限,我不能只为我的两个参数设置一个从 0 到 100000 的线性范围,步长为 10。是否有任何经验建议/策略可供参考?

3个回答

树的数量不是应该调整的参数,但通常设置得足够大。在随机森林中随着树木数量的增加没有过度拟合的风险,因为它们是相互独立训练的。有关这方面的更多信息,请参阅我们的论文:https ://arxiv.org/abs/1705.05654

最大深度是一个参数,大多数时候应该设置得尽可能高,但设置得更低可能会获得更好的性能。

随机森林中有更多参数可以调整,请参阅此处进行讨论:https ://arxiv.org/pdf/1804.03515.pdf

如果您有多个参数,您还可以尝试随机搜索而不是网格搜索,请参阅此处的随机搜索的好参数:http ://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf

如果您只想调整这两个参数,我会将 ntree 设置为 1000 并尝试不同的 max_depth 值。您可以使用袋外观察来评估您的预测,这比交叉验证要快得多。;)

好的,max_depth = [5,10,15..],n_estimators = [10,20,30] 也是如此。将您的训练集分成训练集和验证集。然后遍历 max_depth 和 n_estimators 的所有组合。对于验证的最佳损失',选择它。然后你最终可以在实际验证集上计算验证误差。

您也可以仅根据验证选择最佳方案,但是您将使用相同的集合来一次又一次地进行评估,并且由于多个假设测试,您可能会在验证时获得更好的解决方案,但在最后一个考试。

让我们使用一些约定。P为数据中的特征数XN为示例总数。mtry是 RF 中的参数,用于确定在确定最佳分割P 之前从所有特征中二次采样的特征数量。nodesize是确定叶节点中最小节点数的参数(即,您不想在此之外拆分节点)。

当参数范围较大时,建议使用对数刻度。为什么?mtry从 1 到 10 时,通常比从 90 到 100 时准确度(或任何度量标准)的跳跃更大,因此测试 90 到 100 之间的所有数字会浪费更多时间。其他一些参数也是如此。我建议观看视频以及此线程中的答案链接的一些资源。

第二个想法是在这里使用像贝叶斯优化方案这样的现代超参数搜索算法

接下来,您应该对数据有所了解:

  1. 少量的预测变量是否会对响应产生巨大的影响(mtry在这种情况下更高可能会更好)。还是很多其他小的变量也很重要(mtry越低越好)?所以你看到这会影响你的选择mtry只需拟合一个线性模型即可了解特征重要性。也许你会碰巧得到一些非常重要的功能,而且你的模型很简单。

  2. 如果有很多噪声特征,那么较低mtry就不是那么有用了。散点图很有用。您还可以通过随机排列单个特征的 X(即仅 X 的 1 列)并在使用线性模型之前和之后将其拟合与 Y 进行比较来确定噪声特征。噪声特征肯定不会在拟合或以某种方式在排列后使其变得更好(注意事项:特征之间的交互可能会使最后一步有点冒险,用作确定噪声的指导工具)。

mtry ~ sqrt(P)是基于此处一些答案中链接的学术论文的经验法则。

  1. 您可以对其他参数进行类似的测试,以获得关于您的参数值的直觉(或肯定的确认)。

Breiman(2001) 评论说,树中使用的随机性必须以低相关性为目标,同时保持合理的强度。通过上面的答案链接的 这篇https://arxiv.org/pdf/1804.03515.pdf论文更好地解压。我喜欢读它。