郭震 AI公众号:郭震AI

17 交叉验证

发布日期:

最近更新:

分类: Scikit

预计阅读: 4 分钟

阅读次数: 0

系列进度

Scikit-learn 入门 · 第 17 / 24

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

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

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

阅读路线

先按这条路线读

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

图文要点

先看本文图文节点

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

交叉验证流程图查看大图
交叉验证流程图

交叉验证能降低偶然划分带来的误判。它不只给一个平均分,也能告诉你模型在不同数据切片上是否稳定。

方法细节可参考 scikit-learn cross-validation 文档

交叉验证核对图查看大图
交叉验证核对图

我会同时记录每折分数。平均分高但波动很大,说明模型还没有真正稳定。

在机器学习中,模型的性能评估是至关重要的一步。为了确保我们评估的公正性,特别是当数据相对较少时,交叉验证是一个非常有用的方法。本节将详细介绍交叉验证的概念、原理、不同的交叉验证方法以及如何在 Scikit-Learn 框架中实现交叉验证。

什么是交叉验证?

交叉验证是一种评估机器学习模型泛化能力的方法。它通过将数据集分成多个子集,以确保模型在未见过的数据上也能表现良好。最常用的交叉验证方法是 K 折交叉验证

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

使用交叉验证时,先看 K 折数量、分层抽样、时间顺序、数据泄漏、平均分和方差。

K 折交叉验证 中,数据集会被分成 K 个相同的部分。然后进行 K 次训练和验证,每次使用其中一个部分作为验证集,其余的作为训练集。最后,对 K 次训练结果进行平均,以得到模型的最终性能估计。

交叉验证的步骤

  1. 将数据集分成 K 个折(fold)。
  2. 每次取一个折作为验证集,其余的折作为训练集。
  3. 训练模型并在验证集上评估性能。
  4. 重复以上步骤,直到每个折都被用作验证集一次。
  5. 计算所有验证的平均性能指标。

K 折交叉验证的实现

让我们通过一个简单的例子来演示如何在 Scikit-Learn 中实施 K 折交叉验证。我们将使用 Iris 数据集,这是一个常用的分类数据集。

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

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

示例代码

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

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

# 定义模型
model = RandomForestClassifier(n_estimators=100, random_state=42)

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

# 输出结果
print("每折的准确率:", scores)
print("平均准确率:", np.mean(scores))

在这段代码中,我们首先加载了 Iris 数据集,然后定义了一个 随机森林分类器 作为我们的模型。随后,我们使用 cross_val_score 函数进行 5 折交叉验证,最后输出每一折的准确率和模型的平均准确率。

交叉验证的优点

  • 减少过拟合风险:通过在多个子集上验证模型,可以有效评估模型对未见数据的表现,降低过拟合的风险。
  • 更加稳健的性能估计:通过多次训练和验证,得出的性能指标会比单一训练/测试划分更加可靠。

其他交叉验证的方法

除了 K 折交叉验证,还有其它几种常用的交叉验证方法:

  1. 留一交叉验证(Leave-One-Out Cross-Validation, LOOCV):在这种方法中,每次将一个样本用作验证集,其余样本用作训练集。对于数据量较少的情况,这种方法可以提供较好的性能估计,但计算成本较高。

  2. 分层 K 折交叉验证(Stratified K-Folds):在任务中,如果目标变量的类别不平衡,可以使用这种方法,确保每个折中各类样本的比例与整个数据集中的比例相同。

  3. 时间序列交叉验证:在处理时间序列数据时,可以使用时间序列特有的交叉验证方法,如 TimeSeriesSplit,确保训练集总是早于验证集。

交叉验证应用复盘卡查看大图
交叉验证应用复盘卡

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

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

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

小结

在本节中,我们介绍了 交叉验证 的基本概念和实现方法。通过使用交叉验证,我们可以更好地评估模型性能,并降低过拟合的风险。在下一节中,我们将讨论 模型比较,探索如何在不同模型之间进行有效的比较与选择。

交叉验证在机器学习模型的开发和评估过程中是一个非常重要的工具,掌握它将使你在构建和评估模型时更加游刃有余。

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

交叉验证适合谁读?

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

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

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

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

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

分享文章

转发到常用平台

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

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

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

最多 800 字

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

0/800

留言列表

0
正在加载留言...