两个重点:

一.举个例子,如果建立一个图像识别的数据集,你的训练集和你的训练验证集是从网上爬下来的(也就是说这些图片的大小、像素、后期制作都可能很精美),你真正的测试集是用户的手机上传(不同的手机、环境、光线、时间等等会造成不同的效果)

这两个集合必定不是同分布的,虽然在transfer learning中我们鼓励这种研究方式,但是在单个模型的训练中,不管你的模型建立的多么好,从这个数据集建立开始的那一刻起就注定了你的结果不会很好。所以,在建立自己的数据集时,必须保证同分布的条件,当然这很困难,但是建立一个好的数据集将有助于提升你算法最终的效果。

我在进行植物图片分类时,就自己从网上找了一些图片,结果证明分类效果很差,这有时并不是因为模型的问题。而是因为这些图片取自真正的自然情况,可能在一张图片中包含多种植物,甚至可能有些图片是单株植物,有些图片是成群的,还有一些图片包含了水系和天空,甚至有些图片可能还有人工景色如亭台楼阁等。干扰太大,从像素到时间到光线到取景,从建立数据集的那一刻起就注定了实验的失败。

那么如何才能建立一个标准化的数据集呢?我们都知道可以从各种大赛还有官方的数据集网站上下载数据集,但是当你自己做一种应用场景的实验或者是论文的时候,如果不单单是改进算法,避免数据集的重复就很重要。毕竟phd阶段的算法改进必须放在标准数据集下与它人的结果进行比较,但是master degree下的应用场景就使得你不得不想法设法的建立自己的应用环境(也就是自己的数据集)

打个比方,当你对植物进行分类的时候,最好的方法其实是,不要对自然场景下的植物直接进行分类,对植物的叶片或者果实进行提取,然后找到一个标准的背景板,比如一张A4白纸,在最中心的地方摆放各种植物的叶片或者是果实之类的提取物,使用同一台相机,在相同的位置进行拍摄,重复这一过程,这就叫标准数据集的建立。

二.对数据集的划分不应该train/test,更加标准的做法是train/dev/test,前者必定导致过拟合(如果有人管自己的训练验证集叫测试集,然后宣称自己从算法上改进了过拟合,保持警惕他很有可能是胡说八道)

按照我以往进行的机器学习实验来看,我们通常都是把数据集data set划分为训练集train和测试集test两个集合进行实验,比如十次十折交叉验证,就是一个原始数据集划分十等份,然后每次拿其中的一份出来做测试,然后做十次求一个均值。

但是真正好的做法是划分三个集合:train+Dev+test

顾名思义 dev即development也就是验证集,训练集+验证集其本质就是我们以往划分的交叉验证法的两个集合,与此同时必须划分出一个独立的没有被训练时引入的集合作为真正的测试集test

这样的好处是保证了无偏性能评估,因为如果在训练的时候引入了测试集,过拟合是必定会出现而且理论上无法避免的

如果有人没有划分独立的真正的test date set,那么在查看这种结果时应当报以警惕,显然地这种测试必定是过拟合的。

ubuntu之路——day6(今天对数据集的建立有了更深的体会)的更多相关文章

  1. (转)Python之路,Day6 - 面向对象学习

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...

  2. 在Ubuntu内制作自己的VOC数据集

    一.VOC数据集的简介 PASCAL VOC为图像的识别和分类提供了一整套标准化的优秀数据集,基本上就是目标检测数据集的模板.现在有VOC2007,VOC2012.主要有20个类.而现在主要的模型评估 ...

  3. Python之路,Day6 - Python基础6

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  4. Python之路Day6

    Day6的主要内容是: configparser模块 shutil模块 subprocess模块 处理xml的模块 1.configparser模块 #! /usr/bin/env python # ...

  5. 转:Python之路,Day6 - 面向对象学习

    这篇文章写的不错,转来收了 转自:http://www.cnblogs.com/alex3714/articles/5188179.html   本节内容:   面向对象编程介绍 为什么要用面向对象进 ...

  6. 十一Python之路,Day6 - 面向对象学习

      本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战& ...

  7. python的学习之路day6

    大纲: 1.反射 其中的方法:getattr,delattr,setattr,hasattr __import__() __import__() 注意事项 2.模块中的特殊变量 __doc__ __c ...

  8. ubuntu之路——day19.2 开源框架与迁移、CNN中的数据扩充

    开源框架与迁移 上面介绍了一些已经取得很好成绩的CNN框架,我们可以直接从GitHub上下载这些神经网络的结构和已经在ImageNet等数据集上训练好的权重超参数. 在应用于我们自己的数据时. 1.如 ...

  9. ubuntu之路——day11.7 end-to-end deep learning

    在传统的数据处理系统或学习系统中,有一些工作需要多个步骤进行,但是端到端的学习就是用一个神经网络来代替中间所有的过程. 举个例子,在语音识别中: X(Audio)----------MFCC----- ...

随机推荐

  1. sql server 获取某一字段分组数据的前十条记录

    1.sql 语法 select m, n from ( select row_number () over (partition by m order by n desc) rn,--以m分组,分组内 ...

  2. JSP中Get提交方式的中文乱码解决

    最近对JSP&Servlert的原理很感兴趣,所以今天花时间看了一下:无奈在一个编码问题上困扰很久 这是我的解决思路: (1)检查网页(html/jsp)页面的编码: (2)检查服务器端的处理 ...

  3. Centos7安装Openresty和orange

    1.说明 以下全部操作均已root用户执行 2.安装 2.1 安装依赖 yum install readline-devel pcre-devel openssl-devel gcc 2.2 下载op ...

  4. [S32K]FreeRTOS使用

    参考官方: Tutorial: FreeRTOS 10.0.1 with NXP S32 Design Studio 2018.R1 (官方component是V8.2.1,此文档介绍如何升级到V10 ...

  5. jquery属性文档事件等操作

    1.jq方法attr removeAttr script标签大部分都是写在body标签上.下面的情况下$符号是拿不到的. 将它放到上面就能拿到$对象了.但是不能获取body里的元素.因为代码执行顺序从 ...

  6. 【2019牛客多校第一场】XOR

    题意: 给你一个集合A,里边有n个正整数,对于所有A的.满足集合内元素异或和为0的子集S,问你∑|S| n<=1e5,元素<=1e18 首先可以转化问题,不求∑|S|,而是求每个元素属于子 ...

  7. qingqing的项目

    1 https://www.cnblogs.com/zhangqing979797/p/10147679.html 2 https://www.cnblogs.com/zhangqing979797/ ...

  8. javaWeb的HttpServletRequest和HttpServletResponse

    HttpServletRequest HttpServletRequest对象是封装了用户的请求信息,包括请求参数去,请求头等信息,service()f方法中的两个HttpServletRequest ...

  9. LG3768 简单的数学题

    P3768 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出$(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p$,其中gcd(a,b)表示a与b的最 ...

  10. (java)Jsoup爬虫学习--获取智联招聘(老网站)的全国java职位信息,爬取10页

    Jsoup爬虫学习--获取智联招聘(老网站)的全国java职位信息,爬取10页,输出 职位名称*****公司名称*****职位月薪*****工作地点*****发布日期 import java.io.I ...