两个重点:

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

这两个集合必定不是同分布的,虽然在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. MySQL DataType--隐式类型转换

    隐式类型转换 在官方文档中对隐式类型转换规则有如下描述: 1. If one or both arguments are NULL, the result of the comparison is N ...

  2. RedHat 6.3安装MySQL-server-5.6.13-1.el6.x86_64.rpm

     在RedHat 6.3下安装MySQL-server-5.6.13-1.el6.x86_64.rpm 首先下载下面三个文件: MySQL-client-5.6.13-1.el6.x86_64.rpm ...

  3. p3.BTC-协议

    数字货币是文件,难伪造,但是容易复制,不像实体货币,花出去就没了,数字货币存在double spending attack,双花攻击. 去中心化的货币,需要解决两个问题: 1.货币的发行 挖矿 2.交 ...

  4. 编写订单支付api中遇到的问题

    首先我是按照已经有的已经有的支付api去编写订单支付api,但是由于两者是有区别的,所以类似去搬用难免会出问题,首先我是套用已经写好的model,然后写相应的serializer,实现序列化之后就开始 ...

  5. Flask之threading.loacl方法

    一.threading.loacl方法 import threading import time class Foo: pass foo = Foo() def func(num): foo.num ...

  6. 程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入(图文详解)

    https://blog.csdn.net/ChenRui_yz/article/details/86489067 随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的web安全防范,下面 ...

  7. JAVA对象结构

    对象的内存布局 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header),实例数据(Instance Data)和对象填充(Padding). 实例数据:对象真正存储的 ...

  8. 04 c++中的友元

    c++中的类具有封装性,类中的私有数据只有该类的成员函数可以访问,程序中访问类中的私有成员,必须通过对象来调用成员函数,但是频繁的调用会使运行效率降低. 为了解决上述问题,c++中加入友元机制,友元可 ...

  9. dt6.0之mip改造-img正则替换mip-img

    最近没事,打算把自己的小项目改造为mip,进行测试学习,想把资讯栏目:http://zhimo.yuanzhumuban.cc/news/.全部改造为mip.但是MIP改造一项是:图片标签的改造.而且 ...

  10. mysql 截取字符串 函数

    文章摘取自http://www.cnblogs.com/zdz8207/p/3765073.html 练习截取字符串函数(五个) mysql索引从1开始 一.mysql截取字符串函数 1.left(s ...