Gridsearchcv:内部逻辑

Posted

技术标签:

【中文标题】Gridsearchcv:内部逻辑【英文标题】:Gridsearchcv: internal logic [closed] 【发布时间】:2021-03-09 19:10:05 【问题描述】:

我试图了解 Gridsearchcv 的逻辑是如何工作的。看了here,官方的documentation,还有源码,但是没搞明白:

Gridsearchcv 背后的一般逻辑是什么?

澄清

    如果我使用默认的 cv = 5,输入数据的分割百分比是多少 进入:训练、验证和测试? Gridsearchcv 多久执行一次这样的拆分,它如何决定哪个观察属于训练/验证/测试? 既然已经完成了交叉验证,那么对于超参数调整,平均在哪里发挥作用?即,最优超参数值是否可以优化某种平均值?

这个问题here 与我有同感,但我不知道这些信息是最新的,我不确定我是否了解那里的所有信息。例如,根据OP,我的理解是:

测试集占输入数据集的 25%,创建一次。 训练集和验证集的联合对应创建一次,这个联合是原始数据的75%。 然后,该过程创建 5 个(因为 cv = 5)进一步将这 75% 拆分为 60% 训练和 15% 验证 优化的超参数值是优化这 5 次拆分中某些指标的平均值的值。

这种理解是否正确并且现在仍然适用?以及程序如何将原来的25%-75%拆分?

【问题讨论】:

【参考方案1】:
    首先将数据拆分为训练和测试。测试集被省略用于模型的后期训练和优化。 gridsearchcv 获取 75% 的数据并将它们分成 5 个切片。首先,它训练 4 个切片并在 1 个上进行验证,然后采用 4 个切片引入先前遗漏的集合进行验证并在新集合上进行测试等...... 5 次。

然后可以查看每次运行的性能 + 它们的平均值,以了解您的模型的整体行为方式。

    由于您正在执行gridsearch,因此best_params 将在建模结束时保存以预测您的测试集。 总而言之,在整个训练之后,将为您的模型选择并使用最佳参数,因此,您可以轻松地将它们用于predict(X_test)

Read more here.

    通常如果您不执行 CV,模型会尝试使用预设参数优化其权重,而遗漏的测试集将有助于评估模型性能。但是,对于真正的模型训练,将训练数据重新拆分为训练和验证非常重要,您可以在其中使用验证来超调模型的参数(手动)。但是,过度调优模型以在验证集上获得最佳性能是作弊。

理论 K 折叠

更多详情

【讨论】:

看来我对***.com/q/48852524/6046501的理解是正确的。请跟进一些问题:25%-(5 乘以 60%+15%)是随机决定的吗?该程序何时使用 25% 的测试数据? 25% 的测试数据没有被使用,也没有提供给模型,因此您可以随时在其上测试您的模型……您可以在今天、明天或明年进行。关于 60%-15% 的拆分,理论上,您以某种方式(假设随机)将数据分成 5 个拆分(仅一次),然后通过在 4 上进行训练并在 1 上进行验证来开始迭代...... 我明白了,所以我的理解有误。我认为 Gridsearchcv 输入了我的全部数据,然后将其自己的分区划分为训练+验证+测试。你是说我只是想把用户 I 决定训练+验证的内容提供给它。相应地,相对于输入数据,拆分实际上是 80% 训练 + 20% 验证。这是正确的吗? @yurnero 1) train, test = train_test_split(blabla) ,将火车送入 5cv 并让它发挥作用。关于你的问题,因为你给了 5cvs 然后是 80%20%

以上是关于Gridsearchcv:内部逻辑的主要内容,如果未能解决你的问题,请参考以下文章

使用 python sklearn 的逻辑回归和 GridSearchCV

使用 GridSearchCV 进行逻辑回归时的精度计算警告

尝试实现逻辑回归,但 gridsearchCV 显示输入变量的样本数量不一致:[60000, 60001]

为啥在逻辑回归中对 roc_auc 进行评分时,GridSearchCV 不给出具有最高 AUC 的 C

scikit-learn 中 LogisticRegression 上的 GridSearchCV

GridSearchCV + StratifiedKfold 在 TFIDF 的情况下