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

GridSearchCV默认3折交叉验证,如何配置80-20留出验证?

当然可以!

GridSearchCV的cv参数其实非常灵活,默认的3折只是最基础的用法——你完全可以通过传入自定义的交叉验证生成器来实现80-20划分的留出验证方案。

最常用的两种实现方式:

  • ShuffleSplit:适合回归任务或不关注类别分布的分类任务,它会随机打乱数据后按指定比例划分训练集和验证集,你可以自由设置划分比例和重复验证的次数。
  • StratifiedShuffleSplit:专为分类任务设计,它会保持每个类别在训练集和验证集中的占比一致,避免随机划分导致的类别失衡问题。

给你一个具体的代码示例:

from sklearn.model_selection import GridSearchCV, StratifiedShuffleSplit
from sklearn.svm import SVC
import numpy as np

# 模拟特征数据和标签
X = np.random.rand(100, 5)
y = np.random.randint(0, 2, 100)

# 定义80-20划分的留出验证生成器,重复5次验证(也可以只做1次)
cv = StratifiedShuffleSplit(n_splits=5, test_size=0.2, random_state=42)

# 待搜索的参数网格
param_grid = {'C': [0.1, 1, 10], 'gamma': [1, 0.1, 0.01]}

# 初始化GridSearchCV,传入自定义的cv生成器
grid_search = GridSearchCV(estimator=SVC(), param_grid=param_grid, cv=cv)

# 执行网格搜索
grid_search.fit(X, y)

# 查看结果
print("最佳参数组合:", grid_search.best_params_)
print("平均最佳验证得分:", grid_search.best_score_)

如果是回归任务,只需要把StratifiedShuffleSplit替换成ShuffleSplit即可,用法几乎完全一致。

要是你只需要单次的80-20划分(不需要重复验证),直接把n_splits设为1就行:

cv = ShuffleSplit(n_splits=1, test_size=0.2, random_state=42)

这种方式既满足了你想要的留出验证逻辑,又能借助GridSearchCV的自动参数搜索能力,不用自己手动拆分数据写循环,非常方便~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:53:26