怎么为小数据集划分训练集和测试集

前言

要想训练一个好的深度学习模型需要大量的数据,只有当你收集到足够多的数据构成训练集时,算法的效果最好。有时候我们很难收集到足够多的数据,为了解决数据量的问题,其实我们可以爬虫或购买数据等手段来获取大量的数据。这样会导致训练集和测试集存在差异,所以在划分数据集的时候需要掌握一些技巧。本篇文章的主要内容来自deeplearning.ai

示例说明怎么为小数据集划分训练集和测试集_第1张图片

  • 问题描述

你想开发一个APP,当用户上传图片的时候,系统能够自动判断图片是不是猫的照片。而你实际你能收集到用户使用APP上传的照片只有10000张,为了解决数据量的问题,你通过爬虫从网上下载了200000张照片。通过观察发现,通过爬虫下载的照片和用户上传的照片之间还是存在很大差异的。通过爬虫获取的照片相对会比较清晰,而用户上的照片会比较模糊。那么我究竟应该如何利用这些数据来组合成数据集训练模型呢?

  • 常规的划分数据集方式
    怎么为小数据集划分训练集和测试集_第2张图片
    我们将200000张爬虫所获取到的数据与10000张用户使用APP所获取到的数据进行混合打乱,然后随机分配给训练集205000张、开发集2500张、测试集2500张。这种分配-方式是我们常用的一种划分数据集的方式。这样划分数据集的好处在于,可以保证训练集、开发集和测试集中的数据处于同一分布下。同时也有坏处,仔细观察我们不难发现,210k张图片中,其中有大量的图片都来自于爬虫所获取到的数据,只有很小一部分是来自用户上传的图片。通过计算可以发现,2500张图片中,大约有2381张图片来自于爬虫所获取到的照片,只有119张来自于用户上传的图片,这样就会导致模型过多的关注爬虫所获取到的数据。而我们想训练的是一个能够分辨APP上传照片,而不是爬虫所获取的照片。所以,我们需要采用另外一种划分方式。
  • 数据不同分布的划分
    之前在介绍训练集、开发集以及测试集划分的时候需要训练集与开发集在同一分布上,不然可能会带来大的方差。现在为了使得我们的系统能够分辨APP上传的照片,而不是爬虫所获取的照片,我们需要改变之前数据集的划分方式。在划分数据的时候,我们不将爬虫所获取的照片和APP上传的照片进行混合,而是将APP上传照片的一部分(5000张照片)划分到训练集中将爬虫所获取的照片全部(200000张)划分到训练集中,这样训练集中就有205000张照片,再将剩下的5000张分别划分到开发集和训练集中,这样就能让我们的目标瞄准APP上传的照片,而不是爬虫所获取的照片。这样划分数据所带来的缺点就是,训练集与开发集和测试集不在同一分布,但事实证明这样划分数据能够为你的系统带来长期良好的性能,后面会介绍如何处理训练集和开发集数据分布不一致的情况。

你可能感兴趣的:(deeplearning,ai学习笔记)