郭震 AI公众号:郭震AI

21 交叉验证与调优

发布日期:

最近更新:

分类: Scikit

预计阅读: 4 分钟

阅读次数: 0

系列进度

Scikit-learn 入门 · 第 21 / 24

预计阅读4 分钟
结构重点8 个
图文要点6 张
正文规模1.5k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 8 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

交叉验证与调优流程图查看大图
交叉验证与调优流程图

交叉验证和调参要一起看。搜索过程用验证分数选择参数,最终测试集只用于最后验收,不能反复调到它变好看。

交叉验证与调优核对图查看大图
交叉验证与调优核对图

我会把调参结果和最终测试结果分开记录。验证集用于选择,测试集用于确认,两者职责不能混。

在上一节中,我们讨论了超参数调优中的随机搜索方法。随机搜索为我们提供了一种相对高效的方式来搜索超参数空间,但在实际应用中,我们可能还需要进一步评估模型的性能,以确保找到的超参数组合是最佳的。这就引入了交叉验证(Cross-Validation)的概念,它可以帮助我们更准确地评估模型的表现。

交叉验证的基本概念

交叉验证是用于评估机器学习模型性能的一种技术,它将训练集划分为多个小子集,以便进行多次训练和验证。最常用的交叉验证方法是K折交叉验证(K-Fold Cross-Validation),其基本步骤如下:

交叉验证调优判断卡查看大图
交叉验证调优判断卡

做 Scikit-Learn 交叉验证与调优时,先看折数、参数网格、评分指标、数据泄漏、最佳模型和复测结果。

  1. 将训练数据划分为K个相同大小的子集(折)。
  2. 每次使用K-1个子集进行训练,使用剩下的一个子集进行验证。
  3. 重复K次,每次使用不同的子集进行验证。
  4. 最终的模型性能是K次验证结果的平均值。

通过这种方式,我们可以更好地评估模型对未见数据的预测能力,降低过拟合的风险。

K折交叉验证的实现

接下来,我们将通过一个具体的例子来展示如何在Scikit-Learn中实现K折交叉验证。我们将利用KNeighborsClassifier进行分类任务,并使用KFold函数来执行交叉验证。

Scikit-Learn阅读地图卡查看大图
ScikitLearn阅读地图卡

开始读《交叉验证与调优》前,可以先看图中从问题到结果的路径。读完后再对照正文,确认自己能不能照着复现。

示例代码

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import KFold, cross_val_score
from sklearn.neighbors import KNeighborsClassifier

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 构建模型
model = KNeighborsClassifier(n_neighbors=3)

# 设置K折交叉验证
kf = KFold(n_splits=5, shuffle=True, random_state=42)

# 进行交叉验证
scores = cross_val_score(model, X, y, cv=kf)

# 输出结果
print("交叉验证得分:", scores)
print("平均准确率:", np.mean(scores))

代码解析

  1. 我们首先加载了Iris数据集,并准备好特征矩阵X和目标变量y
  2. 创建了一个KNeighborsClassifier模型,并设定k=3
  3. 使用KFold将数据划分为5个折,并设置随机种子以确保每次划分的可重复性。
  4. cross_val_score函数执行交叉验证,并得到每折的得分。
  5. 输出每折的得分和平均准确率,以评估模型的表现。

超参数调优与交叉验证的结合

在结合超参数调优时,我们可以使用GridSearchCVRandomizedSearchCV,这两者均内置了交叉验证的功能。这样,在搜索超参数时,模型的评估将更加稳健,能够更有效地找到最佳参数。

示例代码

我们将使用GridSearchCV来展示如何结合超参数调优与交叉验证:

from sklearn.model_selection import GridSearchCV

# 定义参数网格
param_grid = {'n_neighbors': np.arange(1, 15)}

# 使用GridSearchCV进行调优
grid_search = GridSearchCV(KNeighborsClassifier(), param_grid, cv=kf)
grid_search.fit(X, y)

# 输出最佳参数和最佳得分
print("最佳参数:", grid_search.best_params_)
print("最佳交叉验证得分:", grid_search.best_score_)

代码解析

  1. 定义了一个参数网格,指定n_neighbors的取值范围。
  2. 创建了一个GridSearchCV对象,其中指定了模型、参数网格及交叉验证方式。
  3. 调用fit方法进行调优,寻找最佳超参数组合。
  4. 最后输出最佳参数及其对应的交叉验证得分。
交叉验证与调优应用复盘卡查看大图
交叉验证与调优应用复盘卡

复习《交叉验证与调优》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

交叉验证与调优应用检查卡查看大图
交叉验证与调优应用检查卡

练习《交叉验证与调优》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

总结

在本节中,我们深入探讨了交叉验证及其在超参数调优中的应用。通过结合K折交叉验证与超参数调优,我们能够更为全面地评估模型的性能并找到最优的超参数配置。这种方法不仅可以提高模型的泛化能力,还能有效地避免过拟合,为后续的应用案例打下良好的基础。

在下一篇文章中,我们将进入一个实际应用案例,讨论如何使用模型进行房价预测

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

交叉验证与调优适合谁读?

这是 Scikit-learn 入门 系列第 21 / 24 篇,适合正在学习Scikit-learn 入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇Scikit-learn 入门教程要多久?

按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...