【问题标题】:Confusion around the SKLearn GridSearchCV scoring parameter and using train test split围绕 SKLearn GridSearchCV 评分参数和使用训练测试拆分的困惑
【发布时间】:2021-10-03 03:01:22
【问题描述】:

我对 GridSearchCV 如何与 Train Test Split 一起工作感到有些困惑。
据我所知,在为我正在使用的数据集创建模型时,一篇论文使用了 roc-auc。
我正在尝试复制这篇论文所做的,至少尽我所能。通过阅读这里的其他几篇文章,我了解到在整个数据集上运行 GridSearchCV 容易出现过拟合,因此我们应该将数据分成训练分区和测试分区。然后,我们应该使用 GridSearchCV 使用任何模型和参数运行训练分区,然后对其进行拟合,然后使用我们预留的数据集的测试部分获得分数。

现在我对 GridSearchCV 感到困惑,据我了解,它为我们提供了在搜索参数和使用 best_score_ 时数据被分成的每个折叠的分数,我们可以从中提取出最好的分数。我不明白分数代表什么以及为什么你可以传入一个评分参数开始,因为 GridSearchCV 的工作是总是找到最好的参数? (也许我在这里做了一个糟糕的假设,但我假设有一个客观的最佳参数集,无论评分方法如何)。我的想法是,我会使用 GridSearchCV 找到最佳参数,然后使用所述参数创建拟合模型,最后使用该模型和我保存的分区进行测试,并使用 roc-auc 评分方法对其进行测试。

所以最后,我传递给 GridSearchCV 的评分方法是否重要(如果有的话),因为无论如何它总是会给出最好的参数集,我将用它来计算我的最终分数测试分区?

【问题讨论】:

    标签: python scikit-learn rdkit


    【解决方案1】:

    This document 可能会有所帮助。

    • 在这里您可以看到scoring 参数允许您拥有各种指标,例如roc_auc。见这里all Scikit's metrics
    • 针对不同指标进行优化会导致不同的最佳参数。只需考虑优化精度与召回率。优化精度可减少误报,优化召回率可减少误报。
    • 另外,在GridSearchCV 中,CV 代表交叉验证。训练/测试拆分发生在这个函数内部,它被处理了。您只需将拆分器作为参数提供给GridSearchCV,例如cv=StratifiedKFold(n_splits=5, shuffle=True)

    【讨论】:

    • 您好!感谢您的迅速回复。我有几个澄清问题,希望你不介意回答。根据我的阅读,GridSearchCV 负责训练和拆分,所以我真的不需要自己手动拆分它。然而,在阅读了这篇文章(见stats.stackexchange.com/questions/436894/…)之后,答案(在那篇文章中)的第二个要点提到他们建议先拆分它,然后从训练组中训练出来。我可能会误解,但这听起来与您的观点相矛盾。
    • 另外,如果我不按照你所说的拆分数据,我想将哪个分数记录为我为任务/数据集找到的 roc-auc(或任何评分方法)?我会从使用 best_prediction_ 的拆分中提取最佳预测并收工吗?非常感谢!!
    • 正如另一篇文章所说,有两种选择。一种在优化之前进行训练/验证/测试拆分,在训练上优化,在验证时选择参数,在测试时验证参数的地方。正如另一篇文章提到的,第二种方法更稳健。您在超参数优化中进行交叉验证。对于每次超参数迭代,您都要交叉验证您的指标,从而形成更稳健的方法。第二种方法符合我的评论。
    • GridSearchCV 返回测试分数的平均值和标准差。你可以选择你想用它做什么。就我个人而言,我总是采取最好的(平均 - 1std)。 Scikit 提供的最好分数是最好的平均分数,它在你的分裂中可能会有很大的差异。你认为最好的完全取决于你的保守主义。
    • 没错。您只需将参数“cv”提供给您的 gridsearchcv。在选择最佳分数时,请考虑最佳均值是最佳的,用一个或多个标准差惩罚的最佳均值更稳健。
    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2020-09-01
    • 2019-08-01
    • 2018-04-30
    • 2016-02-22
    相关资源
    最近更新 更多