【问题标题】:Which model: Best estimator from gridsearchCV or all training data?哪个模型:gridsearchCV 或所有训练数据的最佳估计器?
【发布时间】:2019-04-01 12:34:50
【问题描述】:

当谈到网格搜索和拟合最终模型时,我有点困惑。我将其分为 2 部分:训练和测试。测试集仅用于最终评估。我只使用训练数据执行网格搜索。

假设有人使用交叉验证对多个超参数进行了网格搜索。网格搜索给出了超参数的最佳组合。下一步是训练模型,这就是我感到困惑的地方。我看到了两种可能性:

1) 不要训练模型。使用来自网格搜索的最佳模型的参数。

2) 不要使用来自网格搜索的最佳模型的参数。使用网格搜索中的最佳超参数组合在完整训练集上训练模型。

什么是正确的方法,1 还是 2?

【问题讨论】:

  • 这里没有选项。 GridSearchCV 发现的是超参数(用于初始化和控制模型和学习),但模型仍然需要学习数据(模型学习的参数与 GridSearchCV 发现的超参数有很大不同。您只有选项 2 可行。GridSearchCV 甚至会为您执行此操作,您只需使用新(测试)数据调用 predict()
  • 感谢您的回复,Vivek Kumar。我想我可能有点不清楚。我不是在问你在最后一句话中提到的使用测试集的预测。我在询问如何拟合模型以获取稍后可用于例如的参数。预测。我应该 1) 使用最佳网格搜索中的拟合参数,还是应该使用网格搜索中的最佳超参数组合来拟合完整的训练集?

标签: scikit-learn grid-search


【解决方案1】:

这可能已经晚了,但可能对其他来的人有用。

GridSearchCV 有一个名为refit 的属性,默认设置为True。这意味着在执行 k 折交叉验证(即对您传入的数据的子集进行训练)之后,它会使用网格搜索中的最佳超参数在完整的训练集上重新拟合模型。

据我所知,您的问题大概可以概括为:

假设您使用 5 折交叉验证。然后您的模型仅适合 4 折,因为第五折用于验证。那么您是否需要在整个火车上重新训练模型(即来自所有 5 个折叠的数据)?

答案是否定的,前提是您将 refit 设置为 True,在这种情况下,GridSearchCV 将使用交叉验证后找到的最佳超参数对整个训练集执行训练。然后它将返回经过训练的估计器对象,您可以在该对象上直接调用predict 方法,就像您通常那样做。

参考:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html

【讨论】:

    【解决方案2】:

    您使用训练集和 GridSearch 获得的参数来训练模型。

    然后你就可以用测试集来测试模型了。

    【讨论】:

    • 我已将数据拆分为训练集和测试集。
    • 在进行 GridSearch 时,我在训练集上使用交叉验证。对于 5 折交叉验证,将对训练集中的 5 个不同数据集进行运行估计。对于给定的超参数组合,这些模型中的一个将是最好的,并保留最好的模型。对所有超参数组合重复此过程。最佳超参数是来自不同超参数组合的获胜者中的最佳模型。但是这个模型只应用了 4/5 的训练数据。另一种选择是使用与获胜模型相同的超参数,但要适合整个训练集。
    • 是的,对于最终训练,您使用完整的训练集。
    • @FrancoPiccolo,为什么我们需要再次训练最终模型(例如由 sklearn best_estimator 找到)_ 因为最终模型是由这个训练数据集找到的?
    猜你喜欢
    • 2018-09-15
    • 2023-04-03
    • 2016-07-11
    • 2022-07-19
    • 2019-11-30
    • 2019-03-05
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多