欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 将分类数据划分为训练集、测试集与验证集

将分类数据划分为训练集、测试集与验证集

2024/12/22 0:08:45 来源:https://blog.csdn.net/guzhao9901/article/details/144404440  浏览:    关键词:将分类数据划分为训练集、测试集与验证集

    用于将指定路径下的 0-6 编号的 7 个文件夹中的数据按照 8:1:1 的比例划分到 train、val 和 test 这三个文件夹中。

1.代码功能说明

  1. 源文件夹路径:假设编号文件夹在 src_path 中,每个编号文件夹的名称为 0, 1, 2, …, 6。
  2. 划分比例:默认按照 8:1:1 的比例划分,分别对应训练集、验证集和测试集。
  3. 数据打乱:使用 random.shuffle 将每个编号文件夹内的文件顺序打乱,确保划分均匀。
  4. 目标文件夹创建:在 dest_path 下创建 train、val 和 test 文件夹。
  5. 文件复制:使用 shutil.copy 将文件从源文件夹复制到目标文件夹。
import os
import shutil
import randomdef split_data(src_path, dest_path, split_ratio=(0.8, 0.1, 0.1)):# 创建目标文件夹结构for split in ['train', 'val', 'test']:split_path = os.path.join(dest_path, split)os.makedirs(split_path, exist_ok=True)for i in range(7):  # 创建 0-6 的子文件夹os.makedirs(os.path.join(split_path, str(i)), exist_ok=True)# 遍历编号文件夹(0-6)for folder in range(7):folder_path = os.path.join(src_path, str(folder))if not os.path.exists(folder_path):print(f"文件夹 {folder_path} 不存在,跳过...")continue# 获取文件列表并打乱顺序files = os.listdir(folder_path)random.shuffle(files)# 按照比例划分total_files = len(files)train_end = int(total_files * split_ratio[0])val_end = train_end + int(total_files * split_ratio[1])train_files = files[:train_end]val_files = files[train_end:val_end]test_files = files[val_end:]# 将文件复制到对应的目标文件夹for file in train_files:shutil.copy(os.path.join(folder_path, file), os.path.join(dest_path, "train", str(folder), file))for file in val_files:shutil.copy(os.path.join(folder_path, file), os.path.join(dest_path, "val", str(folder), file))for file in test_files:shutil.copy(os.path.join(folder_path, file), os.path.join(dest_path, "test", str(folder), file))print(f"文件夹 {folder_path} 已处理完成,训练集:{len(train_files)},验证集:{len(val_files)},测试集:{len(test_files)}")# 使用
src_path = "/path/to/source/folders"  # 原始数据文件夹路径
dest_path = "/path/to/destination/folders"  # 目标文件夹路径
split_data(src_path, dest_path)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com