从一个例子开始讲吧。

假设正在调试猫分类器,然后取得了90%准确率,相当于10%错误,,开发集上做到这样,这离希望的目标还有很远。也许的队员看了一下算法分类出错的例子,注意到算法将一些狗分类为猫,看看这两只狗,它们看起来是有点像猫,至少乍一看是。所以也许的队友给一个建议,如何针对狗的图片优化算法。试想一下,可以针对狗,收集更多的狗图,或者设计一些只处理狗的算法功能之类的,为了让的猫分类器在狗图上做的更好,让算法不再将狗分类成猫。所以问题在于,是不是应该去开始做一个项目专门处理狗?这项目可能需要花费几个月的时间才能让算法在狗图片上犯更少的错误,这样做值得吗?或者与其花几个月做这个项目,有可能最后发现这样一点用都没有。这里有个错误分析流程,可以让很快知道这个方向是否值得努力。

这是建议,首先,收集一下,比如说100个错误标记的开发集样本,然后手动检查,一次只看一个,看看的开发集里有多少错误标记的样本是狗。现在,假设事实上,100个错误标记样本中只有5%是狗,就是说在100个错误标记的开发集样本中,有5个是狗。这意味着100个样本,在典型的100个出错样本中,即使完全解决了狗的问题,也只能修正这100个错误中的5个。或者换句话说,如果只有5%的错误是狗图片,那么如果在狗的问题上花了很多时间,那么最多只能希望的错误率从10%下降到9.5%,对吧?错误率相对下降了5%(总体下降了0.5%,100的错误样本,错误率为10%,则样本为1000),那就是10%下降到9.5%。就可以确定这样花时间不好,或者也许应该花时间,但至少这个分析给出了一个上限。如果继续处理狗的问题,能够改善算法性能的上限,对吧?在机器学习中,有时称之为性能上限,就意味着,最好能到哪里,完全解决狗的问题可以对有多少帮助。

但现在,假设发生了另一件事,假设观察一下这100个错误标记的开发集样本,发现实际有50张图都是狗,所以有50%都是狗的照片,现在花时间去解决狗的问题可能效果就很好。这种情况下,如果真的解决了狗的问题,那么的错误率可能就从10%下降到5%了。然后可能觉得让错误率减半的方向值得一试,可以集中精力减少错误标记的狗图的问题。

知道在机器学习中,有时候很鄙视手工操作,或者使用了太多人为数值。但如果要搭建应用系统,那这个简单的人工统计步骤,错误分析,可以节省大量时间,可以迅速决定什么是最重要的,或者最有希望的方向。实际上,如果观察100个错误标记的开发集样本,也许只需要5到10分钟的时间,亲自看看这100个样本,并亲自统计一下有多少是狗。根据结果,看看有没有占到5%、50%或者其他东西。这个在5到10分钟之内就能给估计这个方向有多少价值,并且可以帮助做出更好的决定,是不是把未来几个月的时间投入到解决错误标记的狗图这个问题。

在本幻灯片中,要描述一下如何使用错误分析来评估某个想法,这个样本里狗的问题是否值得解决。有时在做错误分析时,也可以同时并行评估几个想法,比如,有几个改善猫检测器的想法,也许可以改善针对狗图的性能,或者有时候要注意,那些猫科动物,如狮子,豹,猎豹等等,它们经常被分类成小猫或者家猫,所以也许可以想办法解决这个错误。或者也许发现有些图像是模糊的,如果能设计出一些系统,能够更好地处理模糊图像。也许有些想法,知道大概怎么处理这些问题,要进行错误分析来评估这三个想法。

会做的是建立这样一个表格,通常用电子表格来做,但普通文本文件也可以。在最左边,人工过一遍想分析的图像集,所以图像可能是从1到100,如果观察100张图的话。电子表格的一列就对应要评估的想法,所以狗的问题,猫科动物的问题,模糊图像的问题,通常也在电子表格中留下空位来写评论。所以记住,在错误分析过程中,就看看算法识别错误的开发集样本,如果发现第一张识别错误的图片是狗图,那么就在那里打个勾,为了帮自己记住这些图片,有时会在评论里注释,也许这是一张比特犬的图。如果第二张照片很模糊,也记一下。如果第三张是在下雨天动物园里的狮子,被识别成猫了,这是大型猫科动物,还有图片模糊,在评论部分写动物园下雨天,是雨天让图像模糊的之类的。最后,这组图像过了一遍之后,可以统计这些算法(错误)的百分比,或者这里每个错误类型的百分比,有多少是狗,大猫或模糊这些错误类型。所以也许检查的图像中8%是狗,可能43%属于大猫,61%属于模糊。这意味着扫过每一列,并统计那一列有多少百分比图像打了勾。

在这个步骤做到一半时,有时可能会发现其他错误类型,比如说可能发现有Instagram滤镜,那些花哨的图像滤镜,干扰了的分类器。在这种情况下,实际上可以在错误分析途中,增加这样一列,比如多色滤镜

Instagram滤镜和Snapchat滤镜,然后再过一遍,也统计一下那些问题,并确定这个新的错误类型占了多少百分比,这个分析步骤的结果可以给出一个估计,是否值得去处理每个不同的错误类型。

例如,在这个样本中,有很多错误来自模糊图片,也有很多错误类型是大猫图片。所以这个分析的结果不是说一定要处理模糊图片,这个分析没有给一个严格的数学公式,告诉应该做什么,但它能让对应该选择那些手段有个概念。它也告诉,比如说不管对狗图片或者Instagram图片处理得有多好,在这些例子中,最多只能取得8%或者12%的性能提升。而在大猫图片这一类型,可以做得更好。或者模糊图像,这些类型有改进的潜力。这些类型里,性能提高的上限空间要大得多。所以取决于有多少改善性能的想法,比如改善大猫图片或者模糊图片的表现。也许可以选择其中两个,或者的团队成员足够多,也许把团队可以分成两个团队,其中一个想办法改善大猫的识别,另一个团队想办法改善模糊图片的识别。但这个快速统计的步骤,可以经常做,最多需要几小时,就可以真正帮选出高优先级任务,并了解每种手段对性能有多大提升空间。

所以总结一下,进行错误分析,应该找一组错误样本,可能在的开发集里或者测试集里,观察错误标记的样本,看看假阳性(false positives)和假阴性(false negatives),统计属于不同错误类型的错误数量。在这个过程中,可能会得到启发,归纳出新的错误类型,就像看到的那样。如果过了一遍错误样本,然后说,天,有这么多Instagram滤镜或Snapchat滤镜,这些滤镜干扰了的分类器,就可以在途中新建一个错误类型。总之,通过统计不同错误标记类型占总数的百分比,可以帮发现哪些问题需要优先解决,或者给构思新优化方向的灵感。

机器学习策略篇:详解进行误差分析(Carrying out error analysis)的更多相关文章

  1. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  2. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  3. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  4. CentOS 7 下编译安装lnmp之PHP篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...

  5. CentOS 7 下编译安装lnmp之MySQL篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.MySQL下载 MySQL ...

  6. CentOS 7 下编译安装lnmp之nginx篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:CentOS Linux release 7.5.1804 (Core),ip地址 192.168.1.168   ...

  7. Canal:同步mysql增量数据工具,一篇详解核心知识点

    老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...

  8. java提高篇-----详解java的四舍五入与保留位

    转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...

  9. 如何正确删除VMare虚拟机上的系统机器(图文详解)

    不多说,直接上干货! 打开虚拟机进入操作系统列表 在操作系统列表,点击要删除的操作系统,如win7, 点击要删除的操作系统后,在主菜单中找到虚拟机. 如图所示,从磁盘中彻底删除. 是 即,成功从虚拟机 ...

  10. 组件--Fragment(碎片)第二篇详解

    感觉之前看的还是不清楚,重新再研究了一次 Fragment常用的三个类: android.app.Fragment 主要用于定义Fragment android.app.FragmentManager ...

随机推荐

  1. 力扣479(java)-最大回文数乘积(困难)

    题目: 给定一个整数 n ,返回 可表示为两个 n 位整数乘积的 最大回文整数 .因为答案可能非常大,所以返回它对 1337 取余 . 示例 1: 输入:n = 2输出:987解释:99 x 91 = ...

  2. HarmonyOS NEXT应用开发之预加载so并读取RawFile文件

    介绍 本示例主要介绍在TaskPool子线程中使用 dlopen 预加载 so 库并使用句柄调用库函数的方法,以及在Native中使用 pread 系统函数读取Rawfile文件的部分文本内容,并添加 ...

  3. Spring Cloud Bus 消息总线介绍

    简介: 本文配套可交互教程已登录阿里云知行动手实验室,PC 端登录 start.aliyun.com 在浏览器中立即体验. 作者 | 洛夜来源 | 阿里巴巴云原生公众号 本文配套可交互教程已登录阿里云 ...

  4. Yurt-Tunnel 详解|如何解决 K8s 在云边协同下的运维监控挑战

    简介: 伴随着 5G.IoT 等技术的快速发展,边缘计算被越来越广泛地应用于电信.媒体.运输.物流.农业.零售等行业和场景中,成为解决这些领域数据传输效率的关键方式.与此同时,边缘计算形态.规模.复杂 ...

  5. [FAQ] Smart Contract: xxx has not been deployed to detected network (network/artifact mismatch)

    在前端用 web3 与 contract 交互时,需要获取到已部署的 contract 实例进行操作,如果没有获取到就会报此错. 比如如下的 .deployed() 阶段: /* 伪代码 */ con ...

  6. OpenTK 入门 初始化窗口

    本文属于 OpenTK 入门博客,这是一项使用 C# 做底层调用 OpenGL 和 OpenAL 和 OpenCL 的技术.但值得一提的是,如果是想做渲染相关的话,当前是不建议使用 OpenGL 的, ...

  7. WPF 如何知道当前有多少个 DispatcherTime 在运行

    在 WPF 调试中,对于 DispatcherTimer 定时器的执行,没有直观的调试方法.本文来告诉大家如何在 WPF 中调试当前主线程有多少个 DispatcherTimer 在运行 在 WPF ...

  8. 理解FPGA内部的同步信号、异步信号和亚稳态

    FPGA(Field-Programmable Gate Array),即现场可编程门阵列.主要是利用内部的可编程逻辑实现设计者想要的功能.FPGA属于数字逻辑芯片,其中也有可能会集成一部分模拟电路的 ...

  9. 06 curl 操作elasticsearch的CRUD

    目录 查看健康状态 查询当前es集群中所有的indices 创建索引并配置: 创建索引 删除索引 获取mapping 创建mapping 添加字段 插入记录 检索 修改 删除 中文文档: https: ...

  10. docker-compose搭建的Mysql主主复制

    注意下面几点: 1)要保证同步服务期间之间的网络联通.即能相互`ping`通,能使用对方授权信息连接到对方数据库(防火墙开放3306端口). 2)关闭selinux. 3)同步前,双方数据库中需要同步 ...