python - Gridsearchcv:内部逻辑
问题描述
我试图了解 Gridsearchcv 的逻辑是如何工作的。我查看了here,官方文档和源代码,但我无法弄清楚以下内容:
Gridsearchcv 背后的一般逻辑是什么?
澄清:
- 如果我使用默认的 cv = 5,输入数据的拆分百分比是多少:训练、验证和测试?
- Gridsearchcv 多久执行一次这样的拆分,它如何决定哪个观察属于训练/验证/测试?
- 既然已经完成了交叉验证,那么超参数调整在哪里发挥了平均作用?即最佳超参数值是优化某种平均值的值吗?
这里的这个问题与我有同样的担忧,但我不知道这些信息是最新的,我不确定我是否了解那里的所有信息。例如,根据OP,我的理解是:
- 测试集是输入数据集的 25%,创建一次。
- 训练集 和验证集的并集对应创建一次,这个并集是原始数据的 75%。
- 然后,该过程创建 5 个(因为 cv = 5)进一步将这 75% 拆分为 60% 的训练和 15% 的验证
- 优化的超参数值是优化这 5 个分割上某些指标的平均值的值。
这种理解是否正确并且现在仍然适用?以及程序如何将原来的 25%-75% 拆分?
解决方案
- 首先,您将数据拆分为训练和测试。测试集被省略用于模型的后期训练和优化。获取 75%的
gridsearchcv
数据并将它们分成 5 个切片。首先,它训练 4 个切片并在 1 个上进行验证,然后采用 4 个切片引入先前遗漏的集合进行验证并在新集合上进行测试等...... 5 次。
然后可以看到每次运行的性能+它们的平均值,以了解您的模型的整体行为方式。
- 由于您正在执行
gridsearch
,因此best_params
将在建模结束时保存以预测您的测试集。 - 总而言之,在整个训练之后,将为您的模型选择并使用最佳参数,因此,您可以轻松地使用它们来
predict(X_test)
- 通常,如果您不执行 CV,模型会尝试使用预设参数优化其权重,而遗漏的测试集将有助于评估模型性能。但是,对于真正的模型训练,将训练数据重新拆分为训练和验证非常重要,您可以在其中使用验证来超调模型的参数(手动)。然而,过度调优模型以在验证集上获得最佳性能是作弊。
理论 K 倍数
更多细节
推荐阅读
- api - OpenAPI 与 JSON:API
- r - 用 r 中的另一个数据替换列表中的每一行
- java - java构建过程中生成源是什么意思
- javascript - JavaScript,在异步函数中返回函数回调
- java - 无法转换为 class 。. . 是 loader 的未命名模块
- ghost-blog - 如何解决错误 503 Service Unavailable (Ghost)
- c# - ASP.NET Core 使用自定义 HttpClientHandler 模拟 HttpClient
- reactjs - 使用多个(最新)第 3 方反应库反应“未捕获的不变违规:元素类型无效”
- python - 尼泊尔数字的 Python 正则表达式
- javascript - 如何在不使用 javascript 和 django 刷新页面的情况下获取数据?