机器学习策略-不匹配的训练和开发/测试数据

觉得有用的话,欢迎一起讨论相互学习~Follow Me

2.4在不同分布上训练和测试数据

  • 在深度学习时代,越来越多的团队使用和开发集/测试集不同分布的数据来训练模型.下面解释一些方法来处理训练集和测试集存在差异的情况.

Example1

  • 假设你要开发一个识别猫的机器学习系统,其中 需要识别的是用户手机上传的猫的图片 这些图片往往清晰度低,取景不专业,识别度低.由于用户量少的缘故,这些图片量很少,只有大约1W张.但是从网上可以下载大量清晰度高,取景专业,辨识度高的猫的图片,大约20W张. 1W张的用户图片是我们真正关心的数据,但是这对于训练模型是远远不够的.所以我们将20W网上下载的高清图片作为训练集,但这和想要实际处理的数据并不一样

Solution1

  • 将20W张高清图片与1W张用户手机上传的模糊图片混合,随机分配到训练,开发和测试集中.假设你已经确定开发集和测试集中各包含2500个样本,训练集包括205000个样本.
  • 这种方式很大的坏处在于:对于 开发集 的2500个样本,大部分来自于网上下载的高清图片.这并不是你真正关心的数据分布.由数学期望我们计算出大约有\(\frac{200K}{210K}=2381\)张图片来自高清数据集,有\(\frac{10K}{210K}=119\)张图片来自于用户上传图片即真正应该关心的数据.
  • 所以这种方式的结果是系统的大部分工作是优化网上下载的高清图片.这并不是我们需要的分布.
  • 这种方式不推荐使用

Solution2

  • 为了避免Solution1中带来的问题,我们将使用网上的高清图片200K张图片和5K张来自用户手机的上传图片作为 训练集,而 开发集测试集 都是2500张不同的手机图片.
  • 这种方式的好处在于:开发集和测试集中的图片来与用户上传的手机图片 这才是你系统真正关心的重点.

Example2

  • 假设你要开发一个智能语音汽车后视镜,你现在有很多语音数据,但是这些都不是来自智能语音后视镜的.下面解释如何来分配训练集,开发集和测试集.
  • 训练集
  • 500K段语音数据:
    • 购买的带标签的语音数据
    • 智能音箱,语音激活音箱数据
    • 语音激活键盘数据
  • 10K段语音激活后视镜数据
  • 开发集/测试集语音数据:
  • 各来自实际语音激活后视镜的数据5K段语音数据.

2.5 不匹配分布的偏差和方差

  • 对于训练集和开发/测试集来自不同的分布的情况而言,我们计算偏差和方差的方法不同.

    Notics

  • 算法只见过训练集数据,没见过开发集数据
  • 开发集数据来自不同的分布
  • 需要辨清开发集上的误差有多少是因为算法没看到开发集中的数据导致的<方差>,多少是因为开发集数据分布本身就不一样<数据不匹配>

    Solution

  • 定义一个新的数据train-dev set 从训练集中抽取数据,和训练集数据来自同一个数据分布,但是不用于训练数据.
  • 分别将分类器在训练集/训练-开发集/开发集上运行,获取其准确率信息
  • 假如在训练集上误差为1%,在训练-开发集上误差为9%,在开发集上误差为10%
    • 分类器在训练集和训练开发集上误差差距较大,这表明算法没有识别没有看到过的数据,这表明分类器本身方差较大
    • 分类器在训练-开发集和开发集上误差差距不大,表明算法误差的差距不是主要由于数据 分布不一样 导致的
  • 假如在训练集上误差为1%,在训练-开发集上误差为1.5%,在开发集上误差为10%
    • 分类器在训练集和训练开发集上误差差距较小,这表明分类器本身方差不大
    • 分类器在训练-开发集和开发集上误差差距很大,表明算法误差的差距主要由于 数据不匹配 导致的


2.6 定位数据不匹配

  • 如果你的训练集和开发/测试集来自不同的数据分布,并且误差分析的结果表明你有一个数据不匹配的问题,这个问题没有标准的解决方案,但是我们可以尝试一些可以做的事情.

Suggestion

  • 做误差分析,并且了解训练集和开发/测试集的具体差异.
  • 人为加工训练集(人工合成数据),使其和开发/测试集更加相近,或者收集更多的类似于开发/测试集的数据.
  • 对于作者举例的语音识别智能后视镜的例子,我们可以先准备大量清晰的音频(不带马路噪音的数据),然后手机汽车噪音的音频,将两者合成后成为人工合成的数据.
  • 但是应该注意,任意重复噪音,容易造成模型对该段噪音的过拟合.最好是不要重复噪音数据,而是收集等长的噪音数据.学习算法有可能取得更好的性能.
  • 当使用人工数据合成时,一定谨记有可能人工合成的数据只是从所有可能性的空间选取了很小一部分去模拟数据.

[DeeplearningAI笔记]ML strategy_2_2训练和开发/测试数据集不匹配问题的更多相关文章

  1. Alink漫谈(七) : 如何划分训练数据集和测试数据集

    Alink漫谈(七) : 如何划分训练数据集和测试数据集 目录 Alink漫谈(七) : 如何划分训练数据集和测试数据集 0x00 摘要 0x01 训练数据集和测试数据集 0x02 Alink示例代码 ...

  2. [DeeplearningAI笔记]ML strategy_1_2开发测试集评价指标

    机器学习策略 ML strategy 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.4 满足和优化指标 Stisficing and optimizing metrics 有时候把你要考 ...

  3. [DeeplearningAI笔记]ML strategy_1_3可避免误差与改善模型方法

    机器学习策略 ML strategy 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.8 为什么是人的表现 今天,机器学习算法可以与人类水平的表现性能竞争,因为它们在很多应用程序中更有生产 ...

  4. [DeeplearningAI笔记]ML strategy_1_1正交化/单一数字评估指标

    机器学习策略 ML strategy 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.1 什么是ML策略 机器学习策略简介 情景模拟 假设你正在训练一个分类器,你的系统已经达到了90%准确 ...

  5. [DeeplearningAI笔记]ML strategy_2_1误差分析

    机器学习策略-误差分析 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.1 误差分析 训练出来的模型往往没有达到人类水平的效果,为了得到人类水平的结果,我们对原因进行分析,这个过程称为误差 ...

  6. [DeeplearningAI笔记]ML strategy_2_3迁移学习/多任务学习

    机器学习策略-多任务学习 Learninig from multiple tasks 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.7 迁移学习 Transfer Learninig 神 ...

  7. [DeeplearningAI笔记]ML strategy_2_4端到端学习

    机器学习策略-端到端学习 End-to-end deeplearning 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.9 什么是端到端学习-What is End-to-end dee ...

  8. [DeeplearningAI笔记]改善深层神经网络1.1_1.3深度学习使用层面_偏差/方差/欠拟合/过拟合/训练集/验证集/测试集

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.1 训练/开发/测试集 对于一个数据集而言,可以将一个数据集分为三个部分,一部分作为训练集,一部分作为简单交叉验证集(dev)有时候也成为验 ...

  9. ML基础 : 训练集,验证集,测试集关系及划分 Relation and Devision among training set, validation set and testing set

    首先三个概念存在于 有监督学习的范畴 Training set: A set of examples used for learning, which is to fit the parameters ...

随机推荐

  1. Django模板中的数字自增

    Django框架的模板提供了{% for %} 标签来进行循环 例如对集合进行循环是比较简单的 {% for row in v1 %} <div>{{row.name}}</div& ...

  2. 通过例子理解 k8s 架构 - 每天5分钟玩转 Docker 容器技术(122)

    为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的. 执行命令 kubectl run httpd-app --image=httpd --replic ...

  3. qsc oj 22 哗啦啦村的刁难(3)(随机数,神题)

    哗啦啦村的刁难(3) 发布时间: 2017年2月28日 20:00   最后更新: 2017年2月28日 20:01   时间限制: 1000ms   内存限制: 128M 描述 哗啦啦村作为喵哈哈村 ...

  4. HDFS命令全总结

    .copyFromLocal hadoop fs -copyFromLocal -f dcnew.reg_user_actret.csv /dw/test/reg_user_actret_test # ...

  5. .NET MongoDB Driver GridFS 2.2原理及使用示例

    一.API解读 1 GridFSBucketOptions 1)public string BucketName { get; set; } 获取或设置bucket名称 2)public int Ch ...

  6. MyBatis工作原理

    Mybatis工作原理: 我们的应用程序通过mybatis提供的api,增删改查方法来访问数据库,api底层调用了jdbc ,只不过mybatis对jdbc的封装是不完全封装,里面的sql语句需要我们 ...

  7. MFC中菜单的命令响应顺序

    响应只可以由Doc,View,MainFrame以及APP四个类完成. 响应顺序是: 点击某菜单项,框架类最先接到菜单命令消息. 框架类把接收到得这个消息交给它的子窗口,即视图类. 视图类根据命令消息 ...

  8. 改进ban冒泡排序

    设置一标志性变量pos,用于记录每趟排序中最后一次进行交换的位置.由于pos位置之后的记录均已交换到位,故在进行下一趟排序时只要扫描到pos位置即可. //改进后算法如下: function bubb ...

  9. JAVA之JDBC的简单使用(Mysql)

    JDBC增删查改 昨天七七八八的关于Mysql的配置 和 基本使用也算是初步解决了,今天 抽空看了JAVA的JDBC(JAVA DATA BASE CONNECTION)我也不知道我全称拼写对对不对

  10. Node.js框架 —— Express

    一.安装express 1.需先安装express-generator npm install -g express-generator 2.安装express npm install -g expr ...