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

如何在GridSearchCV中传入多个cv折数值实现多折数交叉验证调参

问题解决:GridSearchCV传入多个cv折数的实现方法

报错原因

GridSearchCV的cv参数本身不支持直接传入多个折数组成的列表,它仅支持三种输入格式:

  • 单个正整数:代表K折交叉验证的K值
  • 已定义的交叉验证迭代器(比如KFold实例)
  • 元素为(训练集索引, 测试集索引)的可迭代对象

你直接传入[3,5,6,7,10]时,程序会尝试将列表内的每个整数拆分为训练、测试索引对,自然触发TypeError: cannot unpack non-iterable int object报错。

实现方案

通过外层遍历所有待测试的cv值,每次执行一次GridSearchCV,将不同cv对应的结果存储后对比即可,是最直接高效的实现方式。

代码示例

# 定义待测试的cv折数列表
cv_list = [3, 5, 6, 7, 10]
# 定义字典存储不同cv下的运行结果
cv_result = {}

for cv_val in cv_list:
    # 每次用当前cv值初始化GridSearchCV,error_score=0用于跳过无效参数组合的报错
    logmodel = GridSearchCV(LogisticRegression(), parameters, cv=cv_val, refit=True, error_score=0)
    logmodel.fit(s_scaled_X_train, y_train)
    # 存储当前cv对应的最优参数、验证得分、测试集得分、训练好的模型
    cv_result[cv_val] = {
        "best_params": logmodel.best_params_,
        "best_cv_score": logmodel.best_score_,
        "test_score": logmodel.score(s_scaled_X_test, y_test),
        "trained_model": logmodel
    }

# 遍历输出不同折数下的结果对比
for k, res in cv_result.items():
    print(f"cv={k}时,最优验证得分:{res['best_cv_score']:.4f},测试集得分:{res['test_score']:.4f},最优参数:{res['best_params']}")

额外优化提示

你当前的参数网格存在大量无效组合:l1惩罚项仅支持solver=liblinear和solver=saga,其余solver仅支持l2惩罚,直接运行会产生大量警告且浪费算力,建议调整参数网格为分组形式减少无效计算。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:21:01