You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GridSearchCV查找最优正则参数时如何同时获取训练与验证集分数

问题解答

1. 能否用GridSearchCV调整dropout、L1和L2正则化参数

可以实现。如果你使用的是scikit-learn生态的模型(包括sklearn自带的带正则项的分类/回归模型、通过KerasClassifier/KerasRegressor包装的深度学习模型),只需要将待搜索的参数(如dropout率、L1正则系数、L2正则系数)和候选值整理成参数字典传入GridSearchCV即可,参数名需要和你定义的模型接收的参数名保持一致。

2. 5折交叉验证的拆分逻辑

  • 你传入GridSearchCV的全量X、Y会被平均拆分为5份,每一轮迭代会取其中4份作为训练集,剩余1份作为验证集,5轮迭代下来所有数据都会当过1次验证集、4次训练集,不存在数据浪费,也不需要你额外注入独立验证数据。
  • 整个交叉验证过程的拆分逻辑由GridSearchCV自动完成,不需要手动提前拆分训练集和验证集。

3. 如何获取训练/验证集分数实现自定义评分

你需要先给GridSearchCV设置return_train_score=True参数,开启后搜索结果的cv_results_属性会同时存储每一组参数对应的平均训练集分数(mean_train_score)和平均验证集分数(mean_test_score),后续你可以通过两种方式实现自定义逻辑:

  1. 跑完GridSearchCV后遍历cv_results_的所有参数组合,自行计算训练分和验证分的绝对相对误差,筛选出误差最小的参数组,参考代码如下:
from sklearn.model_selection import GridSearchCV

# 此处替换为你自己的带正则、dropout的模型实例
model = your_model
param_grid = {
    "dropout_rate": [0.1, 0.2, 0.3],
    "l1_alpha": [1e-4, 1e-3, 1e-2],
    "l2_alpha": [1e-4, 1e-3, 1e-2]
}
# 开启return_train_score保留训练集分数
grid = GridSearchCV(model, param_grid, cv=5, return_train_score=True)
grid.fit(X, y)

min_relative_error = float("inf")
best_param_group = None
for i in range(len(grid.cv_results_["params"])):
    train_score = grid.cv_results_["mean_train_score"][i]
    val_score = grid.cv_results_["mean_test_score"][i]
    current_error = abs((train_score - val_score) / train_score)
    if current_error < min_relative_error:
        min_relative_error = current_error
        best_param_group = grid.cv_results_["params"][i]
  1. 也可以自定义scoring函数传入GridSearchCV,但原生scoring函数默认仅能获取验证集数据,因此更推荐第一种方式,直接用返回的结果计算更简便。

内容的提问来源于stack exchange,提问作者rdpdo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 12:15:08