Python实现数据集划分(训练集和测试集)
作者:Python小丸子 发布时间:2022-11-29 23:54:11
标签:Python,数据集,划分
前面是分部讲解,完整代码在最后。
导入模块 :
import os
from shutil import copy, rmtree
import random
创建文件夹 :
def make_file(file_path: str):
if os.path.exists(file_path):
rmtree(file_path)
os.makedirs(file_path)
划分数据集的比例,本文是0.1:验证集的数量占总数据集的10%比如填0.1就是验证集的数量占总数据集的10%
random.seed(0)
split_rate = 0.1
数据集的存放:新建一个数据文件夹,将划分的数据集存放进去
data_path = r'D:\chengxu\data\caodi' # 数据集存放的地方
data_root = r'D:\chengxu\data\cd' # 这里是生成的训练集和验证集所处的位置,这里设置的是在当前文件夹下。
data_class = [cla for cla in os.listdir(data_path)]
print("数据的种类分别为:")
print(data_class) # 输出数据种类
建立训练集文件夹:
train_data_root = os.path.join(data_root, "train") # 训练集的文件夹名称为 train
make_file(train_data_root)
for num_class in data_class:
make_file(os.path.join(train_data_root, num_class))
建立测试集文件夹:
val_data_root = os.path.join(data_root, "val") # 验证集的文件夹名称为 val
make_file(val_data_root)
for num_class in data_class:
make_file(os.path.join(val_data_root, num_class))
划分数据:
for num_class in data_class:
num_class_path = os.path.join(data_path, num_class)
images = os.listdir(num_class_path)
num = len(images)
val_index = random.sample(images, k=int(num * split_rate)) # 随机抽取图片
for index, image in enumerate(images):
if image in val_index:
# 将划分到验证集中的文件复制到相应目录
data_image_path = os.path.join(num_class_path, image)
val_new_path = os.path.join(val_data_root, num_class)
copy(data_image_path, val_new_path)
else:
# 将划分到训练集中的文件复制到相应目录
data_image_path = os.path.join(num_class_path, image)
train_new_path = os.path.join(train_data_root, num_class)
copy(data_image_path, train_new_path)
print("\r[{}] split_rating [{}/{}]".format(num_class, index + 1, num), end="") # processing bar
print()
print(" ")
print(" ")
print("划分成功")
完整代码:
import os
from shutil import copy, rmtree
import random
def make_file(file_path: str):
if os.path.exists(file_path):
rmtree(file_path)
os.makedirs(file_path)
random.seed(0)
# 将数据集中10%的数据划分到验证集中
split_rate = 0.1
data_path = r'D:\chengxu\data\caodi' # 数据集存放的地方,建议在程序所在的文件夹下新建一个data文件夹,将需要划分的数据集存放进去
data_root = r'D:\chengxu\data\cd' # 这里是生成的训练集和验证集所处的位置,这里设置的是在当前文件夹下。
data_class = [cla for cla in os.listdir(data_path)]
print("数据的种类分别为:")
print(data_class)
# 建立保存训练集的文件夹
train_data_root = os.path.join(data_root, "train") # 训练集的文件夹名称为 train
make_file(train_data_root)
for num_class in data_class:
# 建立每个类别对应的文件夹
make_file(os.path.join(train_data_root, num_class))
# 建立保存验证集的文件夹
val_data_root = os.path.join(data_root, "val") # 验证集的文件夹名称为 val
make_file(val_data_root)
for num_class in data_class:
# 建立每个类别对应的文件夹
make_file(os.path.join(val_data_root, num_class))
for num_class in data_class:
num_class_path = os.path.join(data_path, num_class)
images = os.listdir(num_class_path)
num = len(images)
val_index = random.sample(images, k=int(num * split_rate)) # 随机抽取图片
for index, image in enumerate(images):
if image in val_index:
data_image_path = os.path.join(num_class_path, image)
val_new_path = os.path.join(val_data_root, num_class)
copy(data_image_path, val_new_path)
else:
data_image_path = os.path.join(num_class_path, image)
train_new_path = os.path.join(train_data_root, num_class)
copy(data_image_path, train_new_path)
print("\r[{}] split_rating [{}/{}]".format(num_class, index + 1, num), end="") # processing bar
print()
print(" ")
print(" ")
print("划分成功")
来源:https://blog.csdn.net/m0_61497715/article/details/129860228


猜你喜欢
- 本文实例为大家分享了JavaScript实现贪吃蛇的具体代码,供大家参考,具体内容如下首先我们要确定贪吃蛇应有的功能1.通过键盘的上下左右控
- 问题最近在工作中发现了一个问题,Python代码一直用着免费的Google翻译API插件googletrans,这两天突然就报错了:Trac
- 一、Browser Capabilities组件 该组件最主要的作用是:提取识别客户端浏览器的版本信息。其原理是这样的:当客户端浏览器向服务
- 一、初步认识socket被翻译成套接字,尽管有些人诟病,但我觉得还挺贴切的。其功能是提供低级别的网络服务,最常用的就是根据IP来传输数据。所
- 1.添加自定义机器人2.编写python代码请求钉钉机器人所给的webhook钉钉自定义机器人官方文档安全方式使用加签的方式:第一步,把ti
- 当我们在终端上(比如Goland)运行gin框架搭建的服务时,会发现输出的日志是可以带颜色的。比如下图中的最后一行,就是请求一个方法时的输出
- 使用云服务器时,我们有时会连接数据库,但在使用Navicat Premium15来连接时,总会遇到报错。常规连接方式,以腾讯云服务器中的My
- 简介Tornado龙卷风是一个开源的网络服务器框架,它是基于社交聚合网站FriendFeed的实时信息服务开发而来的。2007年由4名Goo
- 前言众所周知,MySQL的存储引擎有MyISAM和InnoDB,锁粒度分别是表锁和行锁。后者的出现从某种程度上是弥补前者的不足,比如:MyI
- Doing INTERSECT and MINUS in MySQL Doing an INTERSECT An INTERSECT is
- SQLServer数据库从高版本降级到低版本实例详解由于目前还广泛使用着SQLServer2000,很多公司又想使用新的SQLServer,
- 1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql> SHOW DATABASES;2:2、创建一个数据库MYSQLDA
- 1.删除所有的目录,只保留datasharebin2.删除BIN下面除以下三个文件之外的所有文件:libmysql.dll(MYSQL5中的
- 场景可能是你用不到,但是我遇到了这样一个问题,就是我想详细了解我的竞争对手的网站(电商类)销售情况和新品上架情况,但是我总不至于像盯盘一样,
- 8大基础定位driver.find_element_by_id() # id定位driver.find_element_by_name()
- 过程名:catch(str) 使用方法: 代码如下:on error resume next '你的代码,如数据库连接 call c
- ASP有一个最重要的功能,就是它可以让你非常轻松地连接数据库。通常都是和一个Access或者一个SQL数据库相连。因为Access是最容易起
- 通过在File->setting->File and Code Templates设置模板代码,这样就可以在新建python文件
- 前言两者的比较只是编程实现上的差异,请不要绝对化、教条化。这里只从技术方面讨论。这种区别非常细,局限于特定场合。在Python编程语言中,遍
- 前言最近学习了 django 的一个 restframework 框架,对于里面的执行流程产生了兴趣,经过昨天一晚上初步搞清楚了执行流程(部