当前位置: 首页 > news >正文

【深度学习笔记 Ⅱ】1 数据集的划分

在深度学习中,**训练集(Training Set)、验证集(Validation Set)和测试集(Test Set)是数据划分的核心组成部分,而交叉验证(Cross-Validation)**是一种更鲁棒的评估方法。以下是详细说明:


1. 数据集的划分

(1) 训练集(Training Set)
  • 作用:用于模型训练,调整权重参数。
  • 比例:通常占数据的60%~80%。
  • 特点:数据量越大,模型学习效果通常越好(需避免过拟合)。
(2) 验证集(Validation Set)
  • 作用
    • 训练过程中评估模型性能,调整超参数(如学习率、网络层数等)。
    • 监控是否过拟合(训练集误差下降但验证集误差上升)。
  • 比例:通常10%~20%。
  • 注意:验证集不能参与训练,否则会导致数据泄露(Data Leakage)。
(3) 测试集(Test Set)
  • 作用:最终评估模型的泛化能力,模拟真实场景。
  • 比例:10%~20%。
  • 关键:测试集仅在最终评估时使用,不能参与任何训练或调参。

2. 交叉验证(Cross-Validation)

(1) 目的
  • 在小规模数据集上更可靠地评估模型,避免单次划分的随机性。
  • 常见方法:k折交叉验证(k-Fold CV)
(2) k折交叉验证步骤
  1. 将训练集随机分为k个等份(如k=5或10)。
  2. 轮流用其中1份作为验证集,其余k-1份作为训练集,重复k次。
  3. 计算k次验证的平均性能作为最终指标。
(3) 优点
  • 充分利用有限数据,减少划分偏差。
  • 尤其适合数据量小的场景(如医疗图像、金融数据)。
(4) 注意
  • 测试集仍需独立保留,不参与交叉验证。
  • 时间序列数据需按时间划分(避免未来信息泄露)。

3. 实际应用建议

  • 大数据场景(如百万级样本):
    • 简单划分(如98:1:1)即可,因验证/测试集绝对量足够。
  • 小数据场景
    • 使用交叉验证,如5折或10折。
  • 超参数调优
    • 在验证集上调整,或用交叉验证结果指导调参。

4. 代码示例(Python)

(1) 简单划分(Scikit-learn)
from sklearn.model_selection import train_test_splitX_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, 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)
(2) k折交叉验证
from sklearn.model_selection import KFoldkf = KFold(n_splits=5, shuffle=True, random_state=42)
for train_index, val_index in kf.split(X_train):X_fold_train, X_fold_val = X_train[train_index], X_train[val_index]y_fold_train, y_fold_val = y_train[train_index], y_train[val_index]# 训练并评估模型...

5. 常见误区

  • 测试集泄露:误用测试集调参会导致性能高估。
  • 数据分布不一致:确保训练/验证/测试集来自同一分布(如相同采集条件)。
  • 时间序列问题:需按时间顺序划分,不能随机打乱。

通过合理划分数据和交叉验证,可以更准确地评估模型性能并提升泛化能力。

http://www.dtcms.com/a/287052.html

相关文章:

  • Linux:多线程---深入生产消费模型环形队列生产消费模型
  • OSPF高级特性之Overflow
  • MyBatis之缓存机制详解
  • uniapp中报错:ReferenceError: FormData is not defined
  • 【安卓笔记】RxJava的Hook机制,整体拦截器
  • JavaScript空值安全深度指南
  • 加线机 和 胶带机
  • LVS 集群技术实践:NAT 与 DR 模式的配置与对比
  • 如何在HTML5页面中嵌入视频
  • 基于单片机宠物喂食器/智能宠物窝/智能饲养
  • 车载传统ECU---MCU软件架构设计指南
  • MSTP 多生成树协议
  • 零基础学后端-PHP语言(第一期-PHP环境配置)
  • 题解:CF1690G Count the Trains
  • 【C++基础】--多态
  • PortSwigger Labs 之 点击劫持利用
  • Go语言流程控制(if / for)
  • 编程研发工作日记_廖万忠_2016_2017
  • 从零构建监控系统:先“完美设计”还是先“敏捷迭代”?
  • Java Web项目Dump文件分析指南
  • 白话深度学习:一副PPT入门CNN,ResNet和Transformer
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十三课——图像直方图和灰度图像叠加的FPGA实现
  • 14-链路聚合
  • ZeroMQ中的REQ/REP模式:分布式系统的同步调用之道
  • JavaSE -- 数据操作流
  • 比亚迪古德伍德亮相:从技术突破到文化对话
  • 【53】MFC入门到精通——MFC串口助手(二)---通信版(发送数据 、发送文件、数据转换、清空发送区、打开/关闭文件),附源码
  • SDIO协商,枚举,CMD等概念
  • SSM框架——Day4
  • 文件管理-文件控制块和索引节点