【问题标题】:Hyperparameter optimisation in Python with a separate validation setPython 中的超参数优化与单独的验证集
【发布时间】:2021-12-18 19:25:27
【问题描述】:

我正在尝试在 Python 中优化 random forest regressor 的超参数。

我有 3 个独立的数据集:训练/验证/测试。因此,我不想使用交叉验证方法,而是想使用特定的验证集来调整超参数,即this stackoverflow post 中描述的“第一种方法”。

现在,sklearn 有一些很好的内置方法可以使用交叉验证来优化超参数(例如 this tutorial),但是如果我想使用特定的验证集来调整我的超参数呢?像RandomizedSearchCV这样的方法还能用吗?

【问题讨论】:

    标签: machine-learning python random-forest


    【解决方案1】:

    cv 选项确实可以。正如documentation 所暗示的,其中一个可能的输入是训练/测试索引元组的可迭代:

    一个可迭代的收益(训练,测试)拆分为索引数组。

    因此,将训练索引和验证索引打包为元组的大小为 1 的列表是可以的。

    【讨论】:

      【解决方案2】:

      我认为我们应该澄清一些措辞:

      '验证集'

      验证集用于在 unseen 数据集(即用于训练的数据上评估您的模型。这是为了模拟您的模型在新数据上的表现。我们使用验证集来调整我们的超参数,例如树的数量、最大深度等,并选择在验证集上效果最好的超参数。

      '交叉验证'

      当您使用 5 折进行 CV(交叉验证)时,您将数据分成 5 个集合,其中集合 [1,2,3,4] 用于训练,集合 5 用于验证。然后您使用 [2,3,4,5] 进行训练并使用集合 1 进行验证 - 您重复此操作,直到所有集合(即使用 5 折时的 5 次)都被用作验证集,然后您将平均您的5 个验证分数,例如获得一个您想要(通常)最大化的分数的准确性。

      回答

      所以,回答你的问题;是的,您可以在您的验证集上使用 GridSearchCV,但从那以后就不再是这种情况了。您通常会执行以下操作之一:

      a) 使用(即一个)验证集来调整您的超参数,如“验证集”中所述

      b) 使用所有数据,即训练+验证作为一个数据集,然后按照“交叉验证”中的说明运行 5 倍网格 CV 搜索

      【讨论】:

        猜你喜欢
        • 2020-10-04
        • 1970-01-01
        • 2018-10-17
        • 2020-07-31
        • 1970-01-01
        • 2021-08-23
        • 2016-02-03
        • 1970-01-01
        • 2017-06-14
        相关资源
        最近更新 更多