使用python划分训练数据集

划分数据集

在实现机器学习的过程中,训练集是用来训练模型的,给模型输入和对应的输出,让模型学习它们之间的关系。

验证集是用来估计模型的训练水平,比如分类器的分类精确度,预测的误差等,我们可以根据验证集的表现来选择最好的模型。

划分数据集功能描述:将一个大数据集按比例划分为训练集和验证集(如下图)
在这里插入图片描述

代码:

#split_data.py
# 划分数据集flower_data,数据集划分到flower_datas中,训练验证比例为8:2
import os
from shutil import copy
import random


def mkfile(file):
    if not os.path.exists(file):
        os.makedirs(file)


# 获取data文件夹下所有文件夹名(即需要分类的类名)
#划分数据集flower_data,数据集划分到flower_datas中
file_path = 'F:/gao/data/flower_data'
new_file_path = 'F:/gao/data/flower_datas'

# 划分比例,训练集 : 验证集 = 8 : 2
split_rate = 0.2

data_class = [cla for cla in os.listdir(file_path)]

train_path = new_file_path + '/train/'
val_path = new_file_path + '/val/'
# 创建 训练集train 文件夹,并由类名在其目录下创建子目录
mkfile(new_file_path)
for cla in data_class:
    mkfile(train_path + cla)

# 创建 验证集val 文件夹,并由类名在其目录下创建子目录
mkfile(new_file_path)
for cla in data_class:
    mkfile(val_path + cla)


# 遍历所有类别的全部图像并按比例分成训练集和验证集
for cla in data_class:
    cla_path = file_path + '/' + cla + '/'  # 某一类别的子目录
    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称
    num = len(images)
    eval_index = random.sample(images, k=int(num * split_rate))  # 从images列表中随机抽取 k 个图像名称
    for index, image in enumerate(images):
        # eval_index 中保存验证集val的图像名称
        if image in eval_index:
            image_path = cla_path + image
            new_path = val_path + cla
            copy(image_path, new_path)  # 将选中的图像复制到新路径

        # 其余的图像保存在训练集train中
        else:
            image_path = cla_path + image
            new_path = train_path + cla
            copy(image_path, new_path)
        print("\r[{}] processing [{}/{}]".format(cla, index + 1, num), end="")  # processing bar
    print()

print("processing done!")

注意:

只需要修改file_path(源文件夹)和new_file_path(新生成的文件夹)

其次是修改split_rate(split_rate=0.2就是训练集:验证集=8:2)

)和new_file_path(新生成的文件夹)

其次是修改split_rate(split_rate=0.2就是训练集:验证集=8:2)

  • 4
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖申克的陪伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值