陈曦,朱小栋
第三部分 基本误差分析(Basic Error Analysis)
第十三章 快速搭建你的第一个系统,然后迭代它
(该方法适用于开发AI应用,不适用于学术研究)
本部分主要讲述如何从基础系统(basic system)中快速找到线索,从而朝着最应该花费时间的方向改进。
第十四章 误差分析:看测试集的样本去评估(改进的)想法
误差分析(error analysis)是分析分类器分错的样本的过程。换句话说,就是手工检验测试集中被分错的100个样本(分析原因),该方法可以帮助你找到最有利的改进方向。
如果你系统整体的精确度是90%并且改进后可能达到的最好的精确度是90.5%,那么这个时候你应该考虑不花费时间去做改进。而当你改进后可能达到的最好的精确度是95%的时候,你应该使用误差分析的方法做出改进。
第十五章 在误差分析中并行评估多个想法
- 举个例子,当我们需要改进猫的检测app时,我们可能从下表中的三个错误原因出发并进行相应的统计。假设我们只分析四个样本:
对于一些特定的样本你可以记下自己的评价帮助你回忆。 - 基于上述内容,你在做这个误差分析的过程中,可能会发现新的错误原因。你可以加入新的错误原因再从头做一遍,这是一个迭代的过程。
- 最有用的误差类型是你知道怎样去解决的。
- 假如我们分析了100个验证集中的样本,如下图所示:
我们会选择占比较高的错误类型先进行改进,比如上表中的后两者。误差分析并不是用严格的数学公式告诉你什么是最优先级的任务(the highest priority task),并且你需要考虑对不同的错误类型改进的空间以及相应的工作量。
第十六章 清洗验证集和测试集中标错的样本
如果你认为手工标记错误也很重要,那么需要在误差分析中加入进来:

- 如何判断手工标记的问题是否需要进行改进呢?分为以下两种情况:
- 当手工标记占整体错误情况比重不大的时候:
相对于9.4%的其他错误那么0.6%的标记错误显得不那么重要,可以不去修复标记错误。换句话说,你系统的错误率是10%还是9.4%都是差不多的。 - 当手工标记占整体错误情况比重较大的时候:
此时手工标记错误已经占到整体错误情况的30%了,那么我们认为此时整体的错误率是1.4%还是2%是个相对重要需要解决的问题。
- 还有以下两点需要注意:
- 对验证集做了什么(改进)就要相应的对测试集做一样的(改进),以保证两者相同的分布。
- 不仅要检查标错的样本,需要双重检查(double-checking),同时检查标记正确的样本以避免出现偏差。当你测试集样本有1000个,精确度达到98%时,你只检查那被标记错误的20个样本更简单。但这样的话偏差(bias)会混进测试集中,所以这种简单的方法只能用于开发产品和应用,不能用来做学术研究。用作学术研究的话,你需要一个完全无偏差衡量测试集精确度的方法(or need a completely unbiased measure of test set accuracy)这里没有明白。。
第十七章 如果你有一个很大的验证集,你需要把它分成两个子集,只有一个子集你需要审视(进行误差分析)
当你的测试集样本有5000个,并且错误率为20%的时候,你的算法标错了1000个测试集中的样本。此时去检查1000个样本很耗时间,所以你可以把验证集分成两组:被审查的测试集(eyeball dev set)和黑箱测试集(blackbox dev set)。被审查的测试集(假设有500个样本)很容易被过拟合,那么可以根据黑箱测试集(这里对应有4500个)进行调参(tune parameters)。
经过误差分析改进过的被审视测试集如果表现得远远好过黑箱测试集,那么就是你过拟合了被审视集。此时你可以从黑箱集中加入一些数据到被审视集或者彻底换一组被审视集。
第十八章 被审视集和黑箱集应该有多大呢?
对被审视集(perform error analyses)来说,
- 你的被审视集越大,那么你的错误类型应该更多:
- 如果错误类型只有十种,那将很难精确评估不同种类错误的影响的。但假如你的数据不是很大,那也会有一些小小的帮助。
- 有二十种错误类型将给你一个大致的主要错误来源方向。
- 有五十种错误类型将给你一个比较好的感觉(主要错误来源)。
- 有一百个错误类型是比较完美的,甚至有时候还有五百个错误类型(如果你的数据量足够大的话)。
- 另外,你的算法错误率越小,那么你的被审视集就必须更大(才能包含更多的被标错的样本)。
- 如果是错误类型是连人们都无法做好的事情,那么用该方法是没有意义的。
对黑箱集(model selection and hyperparameter tuning)来说,
- 一般来说,大概是1000~10000个样本,更多也无妨。就算只有100个也是有用的。
- 如果没有足够数据,将验证集分成被审视集和黑箱集。那么全部用作被审视集即可,只是会有过拟合测试集的风险。
- 作者认为对被审视集做误差分析更为重要,并且在这个过程中设置多少的错误类型是需要慎重考虑的,比如他就很少见到有人会做1000个错误类型的误差分析。
第十九章 打包带走
- 当你开始一个新的项目时,特别是你不擅长的,你很难正确的估计最有希望的方向。
- 所以不要期望着一开始就设计建立一个完美的系统。因此,你可以花几天时间先很快地搭建一个基础的系统。然后利用误差分析去找到最有希望的方向,不断迭代改进你的算法。
- 用人工检查(manually examining)的方式进行误差分析,你算法中标错的100个测试集样本并且统计主要的错误类型。用该方法去判断你要优先处理什么类型的错误。
- 考虑把测试集分成你要人工检查的被审视集和不会进行人工检查的黑箱集。当被审视集表现远远好于黑箱集时,你就过拟合被审视集了,这时候考虑往审实际中加入更多的数据。
- 被审视集必须足够大,方便你分析更多由于你的分类器所导致的错误类型。对于大部分应用来说,黑箱集大致需要1000~10000个样本。
- 如果你的测试集并不足够大,那么不要分成被审视集和黑箱集了。人工检查的错误分析,模型选择和超参数的调整都在测试集上进行即可。