【无标题】用python划分数据集(附完整代码)

在机器学习中,我们时常需要将数据按照比例划分为训练集、测试集。

        本人基于python编写了一段程序用于从多个数据集中简易划分数据集,并统一归纳在对应训练集、测试集文件夹下。

编写思路如下:

        1.利用os.listdir()函数读取文件夹中所有的文件名作为总名录:fileNames,并读取文件名的总数:num_plt

        2.对总数根据需要的比例进行整除,获得测试集的总数:num_test。这里我们选用4:1的比例,所以除以5

        3.利用random.sample()函数,不取回地读取 1/5 的文件名的索引:index_test作为测试集。并将其从大到小进行排序,使pop()函数从后往前拿取。防止拿走前面的文件,导致后面的文件读空

        4.最后利用pop()函数根据读取的索引:index_test,逐一从总名录中拿出文件名plt_test。再利用shutil.copy()函数将测试集文件转移到测试集所在的文件夹:test_path

        5.总名录:fileNames被取走所有的测试集后,剩下的便是训练集了。直接读取再用shutil.copy()函数复制就可以了。

交叉验证的代码会在近期发布,敬请期待!

import os
import numpy as np
import random
import shutil  # 导入移动模块

data_path = "文件夹地址"
sub_path = ['各存放子文件的文件夹名称','...']


fileNames = os.listdir(data_path)  # 获取当前路径下的文件名,返回List
num_plt = len(fileNames)
test_path = data_path + '/test'
train_path = data_path + '/train'

for folder in sub_path:
    # test = []
    file_path = data_path + '/' + folder        # 进入类型文件夹
    fileNames = os.listdir(file_path)       # 读取文件夹中的所有文件名
    num_plt = len(fileNames)        # 得到文件夹中图片的总数
    num_test = num_plt//5       # 计算测试集的总数
    index_test = random.sample(range(num_plt),num_test)        # 从num_plt个文件中随机选出num_test个作为索引,random.sample用于生成不重复的随机数
    index_test.sort(reverse = True)  # 对索引进行排序,使其从后往前删除
    # print(index_test)
    for i in index_test:
        plt_test = fileNames.pop(i)
        shutil.copy(file_path + '/' + plt_test, test_path)   
    for i in fileNames:
        shutil.copy(file_path + '/' + i, train_path)

小知识:

        1.random.sample(list, k)以不取回的方式,随机从列表list中读取k个值。

常用于获取不重复的随机值

        2.list.sort( reverse = FALSE )函数是对列表进行顺序排序。reverse 取 TRUE,列表降序;reverse 取 FALSE反之。

        3.list.pop(obj = list[-1])
pop()用于删除并返回列表中的一个元素(默认为最后一个元素

        4.shutil.copy(src,dst)用于复制文件。其中,src表示源文件,dst表示目标文件夹;

  • 注意:当移动到一个不存在的“目标文件夹”,系统会将这个不存在的“目标文件夹”识别为新的文件夹,而不会报错;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值