两个重点:

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

这两个集合必定不是同分布的,虽然在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. 解决Vivado XSDK在Ubuntu系统上自带UART Terminal Crash问题

    在Ubuntu 18.04 LTS系统上使用某些版本的Vivado XSDK的Eclipse IDE中自带的串口Terminal会有Crash的问题.Xilinx的XSDK的Terminal插件是用的 ...

  2. mysql 的使用

    1. 安装 https://dev.mysql.com/downloads/mysql/ 2. 配置 $ vim ~/.bash_profile $ export PATH=$PATH:/usr/lo ...

  3. Typescript项目注意点和基本类型介绍

    从typescript源文件到执行的过程 执行者 步骤 说明 TSC 1. TypeScript Source -> TypeScript AST TSC将ts文件转为TS AST(abstra ...

  4. 【大数据技术能力提升_4】logistic学习

    logistic学习 标签(空格分隔): logistic sigmod函数 逻辑回归 分类 前言:   整体逻辑回归比线性回归难理解点,其还需要<概率论与数理统计>中"二项分布 ...

  5. AxureRP分页签 / Tab选项卡切换功能~

    最终结果图如下: 实现过程: 1.从元件库中拖一个动态面板,调整所需大小,接下来的步骤都通过双击动态面板来完成. 2.双击动态面板,弹出框“面板状态管理”,新建状态并命名.此处新建了TAB1.TAB2 ...

  6. TLS 1.3 中Pre_shared_key和key_share对应的两种密钥交换模式

    1.TLS1.3的整个协议的文档规范 请参照 RFC 8846,协议规范中指出,TLS1.3提供三方面的安全属性,分别是身份认证.通信加密.完整性验证. 2.TLS1.3协议主要包括两个组成部分,分别 ...

  7. Apache实验-目录别名

    一.作用介绍 在一些情况下,我们的资源文件都在非/var/www/html目录下,例如/var/www/html/sohu.这样的话我们在输入网址的时候就需要在网站根目录下再输入完整的目录.所以我们可 ...

  8. python3 xml_to_dict、dict_to_xml等互相转换的方法

    from basic_config_vars.config_vars import moviesAllFilePath,moviesFilePath #自定义的一些文件变量 import xmltod ...

  9. python多线程扫描爆破网站服务器思路【笔记】

    这个扫描是概率问题,是需要字典的,以下代码是作为参考,字典可以去网上下载,我就不提供,我提供的是思路! #!/usr/bin/env python # coding=utf-8   from IPy ...

  10. ping命令传递信息

    IP: # 适用于 eth0 inet addr: IP的情况 ping `ifconfig eth0|grep 'inet '|awk '{ print $2}'|awk -F: '{print $ ...