Chapter 53、Error analysis by parts
组件错误分析
假设你的系统是使用复杂的机器学习流水线构建的,并且你想提高系统的性能,你该致力于改进流水线中的哪个组件呢?通过将错误归因于流水线的特定组件,你可以决定如何确定工作的优先级。
让我们使用暹罗猫分类器的例子:
第一个组件,猫检测器,从图片中检测出猫并裁剪出来。第二个组件,猫种类分类器,决定它是否是暹罗猫。改进流水线中的这两个组件中的任何一个可能需要花费数年的时间。如何决定应该专注于哪个/些组件?
通过执行组件错误分析,你可以尝试将算法犯的每个错误归因于流水线中的两个组件中的一个(有时候是两个)。例如,尽管正确的label是y=1,但算法却错误的将这张照片分类为不包含暹罗猫(y=0)。
让我们手动检查算法的这两步做了什么。假设暹罗猫检测器检测出的猫如下:
这意味着提供给猫种类分类器的是如下图片:
然后猫种类分类器将该图片正确地分类为不包含暹罗猫。因此,猫种类分类器是无可指责的:提供一堆石头的照片并输出非常合理的label y=0。确实,人对上面的裁剪图片进行分类也会预测y=0。因此,你可以清楚地将该错误归因于猫检测器。
另一方面,如果猫检测器输出如下方框:
那么你会得出这样的结论:猫检测器已完成其工作,猫种类分类器有问题。
假如你仔细检查了开发集中100个错误分类的图片,并发现90个错误归因于猫检测器,只有10个错误归因于猫分类器。你可以安全地得出结论:你应该更专注于改进猫检测器。
此外,你现在还可以方便地找到90个猫检测器输出不正确方框的样本。你可以使用这90个样本对猫检测器进行更深层次的错误分析,以了解如何改进它。
目前为止我们关于你该如何将错误归因于流水线中某一组件的描述是非正式的:查看每个组件的输出,并看看你是否可以决定哪个组件出了问题。这种非正式的方法可能正式你所需要的。但在下个章节,你还将看到一个更加正式的错误归因方法。