关于数据集划分比例问题

问题

图像数据集是训练模型与测试模型必备的,一般而言收集到的数据是整个数据,会将整个数据划分成三个数据集,训练集,验证集以及测试集。

验证和测试的数据要确保特征分布和训练集接近,类别比例也是接近的,这样得到的准确率或者loss才真实。

在做ocr识别模型训练的时候,样本比较大,这时候有点疑惑该如何划分数据集,且数据集中较大比例是自动生成的数据。

方法

  • 一般而言,对于样本量是非常多的数据时候,可以按照7:3~9:1划分数据集。
  • 但是对于几百万或千万级数据量而言,测试集样本不需要太多,只需要划分一定数量的数据作为验证集,划太多也没有意义,毕竟测试集的目的是验证其泛化性能。在pp-ocr文章中,1700w训练数据,测试样本1.7w张

另外对于混合自动生成的数据以及真实数据的情况,需要做一些样本均衡。保证一个batch中真实数据样本和合成数据样本的比例是1:1~1:3左右效果比较理想。如果合成数据过大,会过拟合到合成数据,预测效果往往不佳。

还有一种启发性的尝试是可以先用大量合成数据训练一个base模型,然后再用真实数据微调,在一些简单场景效果也是会有提升的。

参考

### 如何确定数据集的训练集、验证集和测试集的划分比例机器学习实践中,合理分配数据至训练集、验证集以及测试集对于模型性能评估至关重要[^1]。通常情况下,这些集合的比例取决于具体应用场景的数据量大小及特性。 当样本数量充足时,一种常见的做法是采用大约70%的数据作为训练集用于构建模型;约15%-20%的数据构成验证集用来调整超参数并防止过拟合现象的发生;剩余部分则被设置成测试集来最终检验模型泛化能力[^4]。然而,在某些特定领域或者面对较小规模的数据集时,则可能需要采取不同的策略,比如交叉验证方法可以有效利用有限资源的同时保持良好的估计精度。 值得注意的是,并不存在固定的最优分割方案适用于所有情况。实际操作过程中应当依据业务需求、算法特点等因素灵活决定最合适的比例关系。此外,确保各个子集中各类别分布均衡也是十分重要的考量因素之一[^3]。 ```python import os from sklearn.model_selection import train_test_split import shutil def split_dataset(dataset_folder, output_folder, train_ratio=0.7, val_ratio=0.15, test_ratio=0.15): # 获取所有文件名列表 filenames = os.listdir(dataset_folder) # 将文件名转换为绝对路径 filepaths = [os.path.join(dataset_folder, f) for f in filenames] # 划分训练集和其他两者的组合 X_train, X_temp = train_test_split(filepaths, test_size=(val_ratio + test_ratio), random_state=42) # 进一步将其他两者划分为验证集和测试集 relative_val_ratio = val_ratio / (val_ratio + test_ratio) X_val, X_test = train_test_split(X_temp, test_size=test_ratio/(val_ratio+test_ratio), random_state=42) # 创建目标目录结构 dirs = ['train', 'validation', 'test'] for dir_name in dirs: os.makedirs(os.path.join(output_folder, dir_name), exist_ok=True) # 移动文件到相应位置 for files, target_dir in zip([X_train, X_val, X_test], dirs): for filepath in files: filename = os.path.basename(filepath) new_filepath = os.path.join(output_folder, target_dir, filename) shutil.move(filepath, new_filepath) if __name__ == '__main__': dataset_folder = './dataset' output_folder = './splitted_datasets' split_list = [0.7, 0.15, 0.15] split_dataset(dataset_folder, output_folder, *split_list) ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

uncle_ll

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

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

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

打赏作者

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

抵扣说明:

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

余额充值