前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >机器学习入门-训练集/验证集/测试集

机器学习入门-训练集/验证集/测试集

原创
作者头像
皮大大
发布于 2025-05-09 05:12:02
发布于 2025-05-09 05:12:02
25100
代码可运行
举报
运行总次数:0
代码可运行

机器学习知识卡片:

训练集、验证集与测试集+数据集划分

机器学习的世界里,数据是构建模型的基石。但如何有效地使用这些数据来训练和评估模型,却是一门需要深入理解的学问。对于初学者来说,理解训练集、验证集和测试集的概念及其划分原理,是迈向机器学习实践的第一步。

image|330
image|330

1、为什么需要划分数据集?

想象一下,你正在准备一场重要的考试。你会怎么做?通常会:

  1. 学习教材内容(相当于训练集)
  2. 做练习题检验理解(相当于验证集)
  3. 参加模拟考试评估真实水平(相当于测试集)

机器学习中的数据划分遵循类似的逻辑。如果不合理划分数据集,我们可能会陷入以下困境:

• 过拟合(Overfitting):模型在训练数据上表现极好,但遇到新数据时表现糟糕,就像死记硬背的学生无法应对考试中的新问题

• 欠拟合(Underfitting):模型过于简单,无法捕捉数据中的基本模式,就像没有充分学习的学生

• 评估偏差:对模型性能的评估不准确,导致选择错误的模型或参数

本文将深入探讨机器学习中的三个核心数据集——训练集、验证集和测试集,揭示它们各自的功能定位、相互关系以及在实际应用中的关键考量。

image|330
image|330

2. 训练集:模型学习的基础

2.1 训练集的定义与作用

训练集(Training Set)是机器学习模型直接从中学习的原始数据子集,通常占总数据的50-80%。它是模型获取知识、识别模式、建立参数的基础。

类比:就像学生使用的教科书,包含了需要掌握的知识点和例题。

image
image

2.2 训练集的使用方式

在训练过程中,模型通过以下方式从训练集中学习:

  1. 前向传播:输入数据通过网络计算预测值
  2. 损失计算:比较预测值与真实值的差异
  3. 反向传播:根据损失调整模型参数(权重和偏置)
  4. 优化更新:使用优化算法(如SGD、Adam)更新参数

这个过程会迭代多次(称为epoch),直到模型性能达到满意水平或满足停止条件。

2.3 训练集规模的影响

训练集大小对模型性能有显著影响:

• 小训练集:可能导致欠拟合,模型无法学习足够模式

• 适中训练集:通常能获得良好泛化性能

• 极大训练集:可能增加计算成本,但有助于提升模型性能(前提是数据质量高)

经验法则:深度学习模型通常需要大量数据(数千到数百万样本),而传统机器学习算法(如SVM、随机森林)可能在较小数据集上就能表现良好。

2.4 训练数据的质量要求

高质量的训练数据应具备:

  1. 代表性:涵盖问题空间的各种情况
  2. 准确性:标签或目标值正确无误
  3. 一致性:相同情况有相同标注
  4. 多样性:包含各种可能的输入变化
  5. 平衡性:不同类别/值的样本分布合理
    image|300
    image|300

在将数据输入模型前,通常需要进行预处理:

  1. 数据清洗:处理缺失值、异常值、重复数据
  2. 特征工程:创建、选择或转换特征
  3. 归一化/标准化:将特征缩放到相似范围
  4. 数据增强(特别是图像数据):通过旋转、翻转等增加数据多样性

3. 验证集:模型调优的指南针

3.1 验证集的定义与作用

验证集(Validation Set)是用于在训练过程中评估模型性能、指导超参数调整的数据子集,通常占总数据的10-25%。

类比:就像学生的练习题或小测验,用于检查学习效果并指导后续学习策略。

image|120
image|120

3.2 为什么需要验证集?

没有验证集时,我们只能看到模型在训练数据上的表现,这会带来两个严重问题:

  1. 无法检测过拟合:模型可能在训练集上表现很好,但泛化能力差
  2. 无法客观比较不同模型/参数:选择的标准会偏向于在训练数据上表现好的选项

验证集提供了模型在未见数据上的性能估计,帮助我们:

  • 选择最佳模型架构
  • 调整超参数(如学习率、正则化强度)
  • 确定何时停止训练(早停策略)
  • 比较不同特征工程方法的效果

3.3 验证集的使用方式

典型的验证集使用流程:

  1. 在训练集上训练模型
  2. 定期在验证集上评估性能
  3. 根据验证性能调整超参数或模型结构
  4. 重复上述过程直到满足停止条件

重要原则:验证集只能用于评估,绝不能用于训练。任何基于验证集结果对模型做出的调整,本质上都是在"学习"验证集。

3.4 验证集的潜在问题

使用验证集时需要注意:

  1. 验证集泄露:任何形式的使用验证集信息来影响训练过程,都会导致评估偏差
  2. 验证集太小:可能导致性能估计不稳定
  3. 验证集分布偏差:如果验证集不能代表真实数据分布,调优结果可能不理想
  4. 过度调优:在验证集上进行了过多轮次的调优,可能导致模型间接"记忆"验证集
image|400
image|400

4. 测试集:模型性能的最终裁判

4.1 测试集的定义与作用

测试集(Test Set)是用于最终评估模型性能的独立数据集,通常占总数据的10-25%。它模拟模型在真实世界中的表现,是模型开发流程中的"最终考试"。

关键特性:

• 只在项目最后阶段使用一次(理想情况下)

• 绝不能用于任何形式的训练或调优

• 应尽可能反映真实应用场景的数据分布

image
image

4.2 为什么需要独立的测试集?

即使有了验证集,我们仍需要完全独立的测试集,因为:

  1. 避免自我欺骗:在验证集上的多次调优实际上会使模型间接适应验证集
  2. 提供无偏估计:测试集提供了对泛化性能的客观评估
  3. 项目报告:在学术论文或商业报告中,测试集结果是模型性能的黄金标准

4.3 测试集的使用规范

正确使用测试集的准则:

  1. 一次性使用:理想情况下只在项目最后评估一次
  2. 完全隔离:在模型开发和调优阶段不应接触测试集
  3. 不参与任何决策:不基于测试结果调整模型
  4. 反映真实场景:应尽可能模拟实际应用环境

违反这些准则会导致对模型性能的过于乐观估计,在实际部署时可能出现性能骤降。

4.4 测试集的构建要点

构建高质量测试集的注意事项:

  1. 时间一致性:对于时间序列数据,测试集应来自训练/验证集之后的时间段
  2. 分布代表性:应涵盖预期的各种输入情况
  3. 足够大小:太小会导致评估结果不可靠
  4. 标注质量:应有准确可靠的标注,因为测试结果是性能评估的基准

4.5 当测试集不足时

在某些情况下,可能难以获得足够的独立测试数据,可考虑:

  1. 保留部分验证集:从验证集中再分出一小部分作为"伪测试集"
  2. 交叉验证:使用嵌套交叉验证技术
  3. 公开基准:使用领域内公认的测试基准
  4. 合成数据:谨慎生成额外的测试数据(需确保真实性)

5. 数据集划分方法与策略

5.1 基本划分方法

最简单的划分是随机分割:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from sklearn.model_selection import train_test_split
# 初始划分训练集和临时集(通常80%训练,20%临时)
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.2, random_state=42)
# 从临时集中划分验证集和测试集(各占一半)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)

典型比例:

  • 中小规模数据:60%训练,20%验证,20%测试
  • 大数据集:98%训练,1%验证,1%测试(因为绝对量已足够)

5.2 分层抽样

对于分类问题,特别是类别不平衡时,应采用分层抽样保持类别比例:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
X_train, X_temp, y_train, y_temp = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42)
image|300
image|300

5.3 时间序列数据的特殊处理

时间序列数据不能随机划分,通常:

  1. 按时间顺序划分:早期数据训练,近期数据测试
  2. 使用滑动窗口方法创建多个训练-测试对
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 假设数据已按时间排序
split_point = int(len(data) * 0.8)
train, test = data[:split_point], data[split_point:]
image
image

5.4 领域特定划分

某些领域需要特殊划分策略:

• 医学影像:确保同一患者的所有样本只在训练、验证或测试集中出现一次

自然语言处理:注意文档级别的划分,避免同一文档的句子出现在不同集合

推荐系统:按用户划分而非随机划分,模拟真实的新用户场景

5.5 数据划分的常见陷阱

  1. 数据泄露:训练集和验证/测试集之间意外共享信息
  2. 分布偏移:各集合的数据分布不一致
  3. 随机种子固定:始终使用相同随机种子可能导致评估偏差
  4. 划分后预处理:应在划分后分别对各集进行预处理(如归一化),避免信息泄露

6. 特殊场景

6.1 小样本学习的数据策略

当数据极其有限时:

  1. 留一法交叉验证(LOOCV):每次留一个样本作为测试集
  2. 自助法(Bootstrapping):有放回抽样创建多个训练集
  3. 迁移学习:使用预训练模型,只需少量数据微调
  4. 数据增强:人工扩大训练数据多样性

6.2 类别不平衡问题

处理类别不平衡的策略:

  1. 分层抽样:保持各集合中类别比例一致
  2. 重采样:过采样少数类或欠采样多数类
  3. 类别权重:在损失函数中给少数类更高权重
  4. 合成样本:使用SMOTE等方法生成少数类样本

6.3 分布外检测

评估模型在不同于训练分布的数据上的表现:

  1. 创建特殊测试集:包含分布外样本
  2. 对抗测试:故意使用可能使模型失败的案例
  3. 不确定性估计:让模型能够识别不熟悉的数据

6.4 在线学习的数据处理

对于持续更新的模型:

  1. 滚动窗口划分:定期用最新数据作为新测试集
  2. 渐进验证:每个新数据点先用于测试,再用于训练
  3. A/B测试:在生产环境中并行运行不同模型版本比较性能

6.5 多模态数据划分

处理包含多种数据类型(如图像+文本)时:

  1. 协调划分:确保同一实体的不同模态数据在同一集合中
  2. 模态特定划分:当模态间关系不强时,可分别划分
  3. 联合表示学习:先学习跨模态表示,再统一划分

7. 黄金法则

数据划分的黄金法则:

  1. 测试集神圣不可侵犯:只在最后评估使用一次
  2. 验证集用于指导:调优过程中使用,但不直接训练
  3. 训练集尽可能大:在保证验证/测试集足够的前提下
  4. 保持分布一致:确保各集合来自同一分布(除非刻意测试分布偏移)
  5. 文档记录:详细记录划分方法、随机种子和比例
image|500
image|500

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 机器学习知识卡片:
  • 训练集、验证集与测试集+数据集划分
  • 1、为什么需要划分数据集?
  • 2. 训练集:模型学习的基础
    • 2.1 训练集的定义与作用
    • 2.2 训练集的使用方式
    • 2.3 训练集规模的影响
    • 2.4 训练数据的质量要求
  • 3. 验证集:模型调优的指南针
    • 3.1 验证集的定义与作用
    • 3.2 为什么需要验证集?
    • 3.3 验证集的使用方式
    • 3.4 验证集的潜在问题
  • 4. 测试集:模型性能的最终裁判
    • 4.1 测试集的定义与作用
    • 4.2 为什么需要独立的测试集?
    • 4.3 测试集的使用规范
    • 4.4 测试集的构建要点
    • 4.5 当测试集不足时
  • 5. 数据集划分方法与策略
    • 5.1 基本划分方法
    • 5.2 分层抽样
    • 5.3 时间序列数据的特殊处理
    • 5.4 领域特定划分
    • 5.5 数据划分的常见陷阱
  • 6. 特殊场景
    • 6.1 小样本学习的数据策略
    • 6.2 类别不平衡问题
    • 6.3 分布外检测
    • 6.4 在线学习的数据处理
    • 6.5 多模态数据划分
  • 7. 黄金法则
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档