11.何时修改开发集、测试集和度量指标

开展一个新项目,尽快选好开发集和测试集;例子,根据度量指标A分类器排在B分类器前面,但是团队认为B分类器在实际产品上优于A分类器,这时就需要考虑修改开发集和测试集,或者评价指标了。

有三个主要原因可能导致A分类器的评分较低:

(1)你需要处理实际数据的分布和开发集、测试机数据的分布情况不同。

(2)你的开发集上过拟合。

(3)该指标所度量的不是项目应当优化的目标。

12小结:建立开发集和测试集

(1)选择作为开发集和测试集的数据,应当与你预期在将来获取并良好处理的数据有着同分布,但不需要和训练数据的分布一致。

(2)开发集和测试集的分布应当尽可能一致。

(3)选择单一评价指标进行优化,需要考虑多项目标时,不妨将他们整合到一个表达式里面(比如对多个误差指标取平均值),或者定义满意度指标和优化指标。

(4)机器学习是一个高速迭代的过程:在最终令人满意的方案出现前,你可能要尝试很多想法。

(5)拥有开发集、测试集和单值评价指标可以帮助你迅速评估一个算法,从而加速迭代过程。

(6)当你探索一个全新的应用时,尽可能在一周内建立你的开发集、测试集和指标,而在成熟的应用上则可以花费更长的时间。

(7)传统的70%/30%训练集、测试集划分对大规模数据并不适用,实际上开发集和测试集的比例会远低于30%.

(8)开发集的规模应当大到能够检测出算法精度的细微改变,但也不用太大;测试集的规模应当大到能够使你对系统的最终性能作出一个充分的估计。

(9)当开发集和评估指标不再能给团队一个正确的导向时,就尽快修改它们:(i)如果你的开发集上过拟合,则获取更多的开发集数据。(ii)如果开发集和测试集的数据分布和实际关注的数据分布不同,则获取新的开发集和测试集。(iii)如果评价指标不能够对最重要的任务目标进行度量,则需要修改评价指标。

13.快速构建并迭代你的第一个系统

案例:面对要构建一个新的垃圾邮件过滤系统时,可能会有很多不同的想法,这时候首要的不是全面考虑,而是尽快先构建一个最基础的系统。再从这个系统的结果中找出下一步该怎么走的线索(指导方针)。

14.误差分析:根据开发集样本评估想法

误差分析(Error Analysis)指的是检查算法误分类的开发集样本的过程,以便找到造成这些误差的原因。这将帮助你确定项目优先级,即找到什么原因造成误差占比最大,这时去优化它才最有意义,而不是盲目的去优化某一个原因。

15.在误差分析时并评估多个想法

利用电子表格来统计,误分类样本(如100张)分别因为什么而发生误分类,可能一张图有多个原因(如是狗而且很模糊),最终统计各原因占比,选择大的进行优化。

16.清洗误标注的开发集和测试集样本

还是根据以上原理,查看误标注样本对误分类造成的影响所占比例,然后判断是否要去修正,如果修正,务必将这种修正方法用到测试集上,这样才能保证一致性。

17.讲大型开发集拆分为两个子集,专注其一

比如有5000张大型开发集,有20%误差,即有1000张误分类,这是全部进行误差分析,非常耗时,故可以选取500张开发集(约有100张误分类)作为Eyeball开发集,其余4500张作为Blackbox开发集,前者因为已经观察过了,所以很容易过拟合,通过后者进行验证可以准确知道前者何时开始过拟合了,这时应该丢弃或者寻找新的Eyeball开发集或者将后者逐步移入到前者中去。

18.Eyeball和Blackbox开发集该设置多大

Eyeball开发集应该大到能够让你对算法主要的错误类别有所察觉,分类器的误差越小,所需要的EYeball开发集需要越大,才能满足前面第一句话的要求;如果面对的是人类也做不好的任务,那么检车Eyeball开发集将不会有打的版主,因为很难找出算法不能准确分类一个样本的原因。

Blackbox开发集的大小相对于Eyeball没那么重要,有时候可能甚至没有(此时因为Eyeball需要很大的开发集),这是只是造成过拟合分风险比较大。

19.小结:基础误差分析

(1)当你开始一个新项目,尤其是在一个不擅长领域是,很难正确猜测出最有前景的方向。

(2)所以,不要在一开始就师徒设计和构建一个完美的系统。相反,应尽可能(可能在短短几天内)的构建和训练一个基本系统,然后使用误差分析帮助你识别出最有前景的方向,并据此不断迭代改进你的算法。

(3)通过手动检查约100个算法错误分类的开发集样本来执行误差分析,并且计算主要的错误类别,用这些信息来确定优先修正哪种类型的错误。

(4)考虑讲开发集分为人为检查的Eyeball开发集和非人为检查的Blackbox开发集。如果在Eyeball开发集上的性能比在Blackbox开发集上好很多,那么你已经过拟合Eyeball开发集,并且应该考虑为其获得更多的数据。

(5)Eyeball数据即应该足够大,以便于算法有足够的错误分类样本供你分析。对很多应用来说,含有1000-10000个样本的Blackboxk开发集已足够。

(6)如果你的开发集不够大到可以按照这种方式进行拆分,那么就使用Eyeball开发集用于人工误差分析,模型选择和调参数。

20.偏差和方差:误差的两大来源

大前提:假设你的训练集、开发集和测试集都来自相同的分布。单纯去获取跟多训练数据是否可取?

以下初略的定义偏差和方差(总误差=偏差+方差):

偏差:训练集的误差;方差:测试集的误差减去训练集的误差(即测试集比训练集差了多少);例子:比如一个分类器,训练集的误差是15%,测试集的误差是16%,那么偏差为15%,方差为1%,此时属于高偏差,单纯增加数据量是无济于事的。

吴恩达《Machine Learning Yearning》总结(11-20章)的更多相关文章

  1. 吴恩达Machine Learning 第一周课堂笔记

    1.Introduction 1.1 Example        - Database mining        Large datasets from growth of automation/ ...

  2. 吴恩达Machine Learning学习笔记(一)

    机器学习的定义 A computer program is said to learn from experience E with respect to some class of tasks T ...

  3. 吴恩达Machine Learning学习笔记(四)--BP神经网络

    解决复杂非线性问题 BP神经网络 模型表示 theta->weights sigmoid->activation function input_layer->hidden_layer ...

  4. 吴恩达Machine Learning学习笔记(三)--逻辑回归+正则化

    分类任务 原始方法:通过将线性回归的输出映射到0-1,设定阈值来实现分类任务 改进方法:原始方法的效果在实际应用中表现不好,因为分类任务通常不是线性函数,因此提出了逻辑回归 逻辑回归 假设表示--引入 ...

  5. 吴恩达Machine Learning学习笔记(二)--多变量线性回归

    回归任务 多变量线性回归 公式 h为假设,theta为模型参数(代表了特征的权重),x为特征的值 参数更新 梯度下降算法 影响梯度下降算法的因素 (1)加速梯度下降:通过让每一个输入值大致在相同的范围 ...

  6. 吴恩达 Deep learning 第二周 神经网络基础

    逻辑回归代价函数(损失函数)的几个求导特性 1.对于sigmoid函数 2.对于以下函数 3.线性回归与逻辑回归的神经网络图表示 利用Numpy向量化运算与for循环运算的显著差距 import nu ...

  7. 吴恩达 Deep learning 第一周 深度学习概论

    知识点 1. Relu(Rectified Liner Uints 整流线性单元)激活函数:max(0,z) 神经网络中常用ReLU激活函数,与机器学习课程里面提到的sigmoid激活函数相比有以下优 ...

  8. Github | 吴恩达新书《Machine Learning Yearning》完整中文版开源

    最近开源了周志华老师的西瓜书<机器学习>纯手推笔记: 博士笔记 | 周志华<机器学习>手推笔记第一章思维导图 [博士笔记 | 周志华<机器学习>手推笔记第二章&qu ...

  9. 我在 B 站学机器学习(Machine Learning)- 吴恩达(Andrew Ng)【中英双语】

    我在 B 站学机器学习(Machine Learning)- 吴恩达(Andrew Ng)[中英双语] 视频地址:https://www.bilibili.com/video/av9912938/ t ...

  10. Coursera课程《Machine Learning》吴恩达课堂笔记

    强烈安利吴恩达老师的<Machine Learning>课程,讲得非常好懂,基本上算是无基础就可以学习的课程. 课程地址 强烈建议在线学习,而不是把视频下载下来看.视频中间可能会有一些问题 ...

随机推荐

  1. MySQL中查询时对字母大小写的区分

    我相信很多人在mysql中查询时都遇到过mysql不区分字母大小写的情况:如以下例子: 1.SELECT * FROM `user` WHERE userpass = 'Z20'; 结果为: 2.SE ...

  2. python-列表增删改查、排序、两个list合并、多维数组等

    一.list列表 数组 列表类型:list 下标从0开始,0,1,2... 二.列表增加元素 stus.append() 在列表末尾增加一个元素: stus.insert(,)  在指定位置添加一个元 ...

  3. 【spring cloud】并发测试问题

    一,问题 并发测试,对外接口测试50个并发的时候开发报错,报错信息类似如下:  {"status":"0500","message":&qu ...

  4. VS2019和net core 3.0(整理不全,但是孰能生巧)

    更新 net core 3.0 只能配合vs2019 net core 3.0 新特性 详情 IntelliCode 智能插件 live share ctrl+. 快速重构 调试中的数据断点(很棒) ...

  5. 《Andrew Ng深度学习》笔记2

    神经网络基础 1.图计算 计算时有两种方法:正向传播和反向传播.正向传播是从底层到顶层的计算过程,逐步推出所求公式.反向传播是从顶层到底层,从已知的式子求出因变量的影响关系. 在这里用到的反向传播算法 ...

  6. Java实现二维码生成的方法

    1.支持QRcode.ZXing 二维码生成.解析: package com.thinkgem.jeesite.test; import com.google.zxing.BarcodeFormat; ...

  7. redis 连接字符串,设置密码

    <add name="Abp.Redis.Cache" connectionString="127.0.0.1:6379,password=123456" ...

  8. Luogu P1436 棋盘分割 暴力DP

    我的天,,,,,n=8,k<=15,,,这怕不是暴力DP+高维数组.... 开一个五维数组f[k][i][j][p][q]表示从(i,j)到(p,q)中分成k个矩形最小的平方和. 然后初始化时用 ...

  9. java的长字符串转化为短字符串

    public class CustomEncrypt{ public static void main( String[] args ) { /* * c#给的正确测试用例: id=>mid * ...

  10. 面向对象中的@classonlymethod 与 @classmethod的区别

    如果要使用classonlymethod ,则需要先定义好一个classonlymethod 类. 首先我们需要明白无论是classonlymethod还是classmethod,本质都是一个类,而c ...