如何理解和区分训练集、测试集和验证集

如何理解和区分训练集、测试集和验证集

在这里插入图片描述

🌈 个人主页:高斯小哥
🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】
💡 创作高质量博文,分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)


🌵文章目录🌵

  • 一、概念回顾 🧠
  • 二、基于PyTorch划分训练集、验证集、测试集 🔥
  • 三、模型训练与评估 🔥
  • 四、总结 🎉
  • 五、最后 🤝

  👋大家好,欢迎来到我的博客!在机器学习和深度学习的世界里,数据集被划分为训练集、验证集和测试集是非常重要的。这些集合各自扮演着不同的角色,确保我们的模型能够准确地学习和泛化。今天,我将通过PyTorch的示例代码来详细解释如何理解和区分这三个集合。

关键词:#机器学习 #深度学习 #训练集 #验证集 #测试集 #PyTorch #数据划分 #模型训练与评估

一、概念回顾 🧠

  • 训练集(Training Set):用于训练模型的数据集。模型通过学习训练集中的数据来拟合数据分布并学习规律。
  • 验证集(Validation Set):用于验证模型性能的数据集。在模型训练过程中,我们使用验证集来调整模型参数和超参数,以优化模型性能。验证集帮助我们在调整模型时避免过拟合。
  • 测试集(Test Set):用于评估模型性能的数据集。在模型训练完成后,我们使用测试集来评估模型的泛化能力,即模型在未知数据上的表现。测试集应该是完全独立的,从未参与模型的训练或验证。

二、基于PyTorch划分训练集、验证集、测试集 🔥

  在PyTorch中,我们通常使用torch.utils.data.Datasettorch.utils.data.DataLoader来处理数据集。首先,我们需要创建一个继承自Dataset的自定义数据集类,然后使用DataLoader来加载数据并提供批量处理、打乱等功能。

  下面是一个简单的例子,展示了如何创建一个自定义数据集类,并划分为训练集、验证集和测试集。

import torch
from torch.utils.data import Dataset, DataLoader
from sklearn.model_selection import train_test_split# 假设我们有一个简单的数据集,包含特征和标签
features = torch.randn(1000, 10)  # 1000个样本,每个样本10个特征
labels = torch.randint(0, 2, (1000,))  # 1000个样本的二分类标签# 划分数据集为训练集和临时集(验证集+测试集)
X_train, X_temp, y_train, y_temp = train_test_split(features, labels, test_size=0.4, 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)# 自定义数据集类
class MyDataset(Dataset):def __init__(self, features, labels):self.features = featuresself.labels = labelsdef __len__(self):return len(self.labels)def __getitem__(self, idx):return self.features[idx], self.labels[idx]# 创建数据集实例
train_dataset = MyDataset(X_train, y_train)
val_dataset = MyDataset(X_val, y_val)
test_dataset = MyDataset(X_test, y_test)# 创建数据加载器
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

三、模型训练与评估 🔥

  现在,我们有了训练集、验证集和测试集的数据加载器,接下来是训练模型并使用验证集进行调整,最后使用测试集评估模型的性能。

import torch.nn as nn
import torch.optim as optim# 定义一个简单的模型
class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc = nn.Linear(10, 2)def forward(self, x):return self.fc(x)# 实例化模型、损失函数和优化器
model = SimpleModel()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 训练模型
num_epochs = 10
for epoch in range(num_epochs):model.train()  # 设置模型为训练模式train_loss = 0.0for inputs, labels in train_loader:optimizer.zero_grad()  # 清空梯度outputs = model(inputs)  # 前向传播loss = criterion(outputs, labels)  # 计算损失loss.backward()  # 反向传播optimizer.step()  # 更新参数train_loss += loss.item() * inputs.size(0)  # 累加损失train_loss /= len(train_loader.dataset)  # 计算平均损失print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {train_loss:.4f}")# 使用验证集评估模型性能model.eval()  # 设置模型为评估模式val_loss = 0.0val_accuracy = 0.0with torch.no_grad():  # 不需要计算梯度for inputs, labels in val_loader:outputs = model(inputs)loss = criterion(outputs, labels)val_loss += loss.item() * inputs.size(0)# 计算准确率_, predicted = torch.max(outputs, 1)correct = (predicted == labels).sum().item()val_accuracy += correct / inputs.size(0)val_loss /= len(val_loader.dataset)val_accuracy /= len(val_loader)print(f"Validation Loss: {val_loss:.4f}, Accuracy: {val_accuracy:.4f}")# 使用测试集评估模型性能
model.eval()  # 保持模型为评估模式
test_loss = 0.0
test_accuracy = 0.0with torch.no_grad():  # 不需要计算梯度for inputs, labels in test_loader:outputs = model(inputs)loss = criterion(outputs, labels)test_loss += loss.item() * inputs.size(0)# 计算准确率_, predicted = torch.max(outputs, 1)correct = (predicted == labels).sum().item()test_accuracy += correct / inputs.size(0)test_loss /= len(test_loader.dataset)
test_accuracy /= len(test_loader)print(f"Test Loss: {test_loss:.4f}, Accuracy: {test_accuracy:.4f}")

四、总结 🎉

  通过上面的代码和解释,我们了解了如何在PyTorch中创建数据集、划分训练集、验证集和测试集,并使用这些集合来训练和评估模型。在实际应用中,通常还需要进行更多的数据预处理步骤,如数据清洗、特征工程等。此外,模型的性能也可以通过其他指标来评估,如精确度、召回率、F1分数等,具体取决于问题的性质和目标。

  希望这篇博客能帮助你更好地理解和区分训练集、验证集和测试集,并在实践中应用它们来构建和评估机器学习模型!🚀


五、最后 🤝

  亲爱的读者,感谢您每一次停留和阅读,这是对我们最大的支持和鼓励!🙏在茫茫网海中,您的关注让我们深感荣幸。您的独到见解和建议,如明灯照亮我们前行的道路。🌟若在阅读中有所收获,一个赞或收藏,对我们意义重大。

  我们承诺,会不断自我挑战,为您呈现更精彩的内容。📚有任何疑问或建议,欢迎在评论区畅所欲言,我们时刻倾听。💬让我们携手在知识的海洋中航行,共同成长,共创辉煌!🌱🌳感谢您的厚爱与支持,期待与您共同书写精彩篇章!

  您的点赞👍、收藏🌟、评论💬和关注💖,是我们前行的最大动力!

  🎉 感谢阅读,祝你编程愉快! 🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/697183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

靡语IT:Vue精讲(一)

Vue简介 发端于2013年的个人项目,已然成为全世界三大前端框架之一,在中国大陆更是前端首选。 它的设计思想、编码技巧也被众多的框架借鉴、模仿。 纪略 2013年,在Google工作的尤雨溪,受到Angular的启发,从中提取自…

soc(十七) SOC市场分类

桌面服务器集中式服务器架构和基于ARM微服务器架构的存储差别在哪? http://www.dostor.com/p/54167.html 手机飞行器汽车家庭监控安防路由器

【前端素材】推荐优质后台管理系统Protable平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理和监控网站、应用程序或系统的在线工具。它通常是通过网页界面进行访问和操作,用于管理网站内容、用户权限、数据分析等。当我们从多个层次来详细分析后台管理系统时,可以将其功能和定义进一步细分,…

华为配置CAPWAP双栈覆盖业务示例

配置CAPWAP双栈覆盖业务示例 组网图形 图1 配置CAPWAP双栈覆盖业务示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 企业用户接入WLAN网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时,不影响用户的业…

解决 PLC QModbusTcpClient 通信自动断开

项目场景: 提示:这里简述项目相关背景: 例如:项目场景:QModbusTcpClient 通信 问题描述 提示:这里描述项目中遇到的问题: QModbusTcpClient 连接后,稍微停一段时间,就…

LeetCode10. Regular Expression Matching——完全背包

文章目录 一、题目二、题解 一、题目 Given an input string s and a pattern p, implement regular expression matching with support for ‘.’ and ‘*’ where: ‘.’ Matches any single character.​​​​ ‘*’ Matches zero or more of the preceding element. The…

【selenium】三大切换 iframe 弹窗alert 句柄window 和 鼠标操作

目录 一、iframe 1、切换方式: 1、第一种情况: 2、第二种情况: 方式1: 先找到iframe,定位iframe元素(可以通过元素定位的各种方式:xpath,css等等),用对象接收&…

MyBatis Plus中的动态表名实践

随着数据库应用的不断发展,面对复杂多变的业务需求,动态表名的处理变得愈发重要。在 MyBatis Plus(以下简称 MP)这一优秀的基于 MyBatis 的增强工具的支持下,我们可以更便捷地应对动态表名的挑战。本文将深入研究如何在…

美创新一代数据安全管理平台宣传片「龍」重登场

美创新一代数据安全管理平台(DSM Cloud)产品宣传片 国产化、混合多云环境催生愈加复杂的数据安全防护、管理及可持续运营挑战。 美创新一代数据安全管理平台(DSM Cloud),围绕韧性数据安全体系,聚焦全域数据…

[HTML]Web前端开发技术27(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

activeMq将mqtt发布订阅转成消息队列

1、activemq.xml置文件新增如下内容 2、mqttx测试发送: 主题(配置的模糊匹配,为了并发):VirtualTopic/device/sendData/12312 3、mqtt接收的结果 4、程序处理 package comimport cn.hutool.core.date.DateUtil; imp…

ReactNative进阶(二十三)error: no type or protocol named ‘RCTBridgeModule’问题修复

文章目录 一、前言三、拓展阅读 一、前言 Jenkins组包RN技术栈实现的iOS应用时&#xff0c;遇到以下错误提示信息&#xff1a; error: no type or protocol named ‘RCTBridgeModule’ interface RCTEventDispatcher : NSObject <RCTBridgeModule>error: cannot find i…

【AIGC】基于深度学习的图像生成与增强技术

摘要&#xff1a; 本论文探讨基于深度学习的图像生成与增强技术在图像处理和计算机视觉领域的应用。我们综合分析了主流的深度学习模型&#xff0c;特别是生成对抗网络&#xff08;GAN&#xff09;和变分自编码器&#xff08;VAE&#xff09;等&#xff0c;并就它们在实际应用中…

嵌入式linux开发 (三十四) 内存管理2.0(6) 各种段(.code .rodata .data .bss .stack .heap)的含义

我们知道, 逻辑程序在连接的时候在elf 文件中会有 .code .rodata .data 然后在内存中才会有 .code .rodata .data那么为什么链接器在链接生成的elf文件中会有这些段呢?这涉及到链接器的历史问题

小程序性能优化

背景 在开发小程序的过程中我们发现&#xff0c;小程序的经常会遇到性能问题&#xff0c;尤其是在微信开发者工具的时候更是格外的卡&#xff0c;经过排查发现&#xff0c;卡顿的页面有这么多的js代码需要加载&#xff0c;而且都是在进入这个页面的时候加载&#xff0c;这就会…

Java架构师之路九、设计模式:常见的设计模式,如单例模式、工厂模式、策略模式、桥接模式等

目录 常见的设计模式&#xff1a; 单例模式&#xff1a; 工厂模式&#xff1a; 策略模式&#xff1a; 桥接模式&#xff1a; 责任链模式&#xff1a; Java架构师之路八、安全技术&#xff1a;Web安全、网络安全、系统安全、数据安全等-CSDN博客Java架构师之路十、框架和工…

Android 仿信号格子强度动画效果实现

效果图 在 Android 中&#xff0c;如果你想要绘制一个圆角矩形并使其居中显示&#xff0c;你可以使用 Canvas 类 drawRoundRect 方法。要使圆角矩形居中&#xff0c;你需要计算矩形的位置&#xff0c;这通常涉及到确定矩形左上角的位置&#xff08;x, y&#xff09;&#xff0…

Leetcode 第 384 场周赛题解

Leetcode 第 384 场周赛题解 Leetcode 第 384 场周赛题解题目1&#xff1a;3033. 修改矩阵思路代码复杂度分析 题目2&#xff1a;3034. 匹配模式数组的子数组数目 I思路代码复杂度分析 题目3&#xff1a;3035. 回文字符串的最大数量思路代码复杂度分析 题目4&#xff1a;3036. …

C语言标准库介绍:<string.h>

在C语言中&#xff0c;<string.h>头文件是标准库中的一个重要部分&#xff0c;它定义了一系列操作字符串和字符数组的函数。本文将详细介绍<string.h>头文件中包含的22个函数&#xff0c;并提供每个函数的完整示例代码。 简介 <string.h>头文件定义了一个变…

设计模式-工厂模式(Factory Pattern)

一、工厂模式说明 工厂模式是一种创建型设计模式&#xff0c;它提供了一种将对象的创建与使用分离的方式。工厂模式通过引入一个公共的接口来创建对象&#xff0c;而不是通过直接调用构造函数来创建对象。这样做的好处是使得代码更加灵活&#xff0c;更容易维护和扩展。 工厂模…