根据组件进行误差分析
假设你的系统由复杂的机器学习流水线所构建,并且你希望提高该系统的性能,那应该从流水线的哪一部分开始改进呢?你可以通过将误差归因于流水线的特定组件,来决定工作的优先级。
我们使用暹罗猫分类器的例子来进行说明:
在上图的流水线中,第一部分是猫检测器,它能够检测出猫,并将它们从图像裁剪出来;第二部分是猫的品种分类器,决定它是否是暹罗猫。 改进两个组件中的任何一个都有可能花费数年的时间。 你该决定关注哪个(些)组件呢?
通过按组件进行误差分析,你可以尝试将每一个算法造成的误差归因于流水线的某个(有时是两个)组件。例如,即使某张图片样本的正确标签为含有暹罗猫( ) ,算法依旧将其标签误分类为不含有暹罗猫().
让我们人为地检查一下算法两个步骤的执行过程。假设暹罗猫检测器从下图中检测出一只猫:
这表示猫检测器给出了这样的图片:
接下来,猫品种分类器将此图像正确分类为不包含暹罗猫。 因此,猫品种分类器是正常工作的:给它一堆岩石并输出一个非常合理的标签(). 实际上,对上面裁剪的图像进行分类的人也会预测(). 因此,你可以清楚地将此误差归因于猫探测器组件。另一方面,如果猫探测器输出了以下边界框:
你会得出如下结论,猫探测器已经完成了它的工作,并且它是有缺陷的猫品种分类器。
如果你对 100 个误分类的开发集图像遍历检查,并发现 90 个误差可归因于猫探测器,并只有 10 个误差可归因于猫品种分类器。 那么你可以有把握地得出结论,应该更加专注于改进猫探测器。
此外,你现在还可以方便地找到 90 个样本,其中猫探测器将输出不正确的边界框。 你可以使用这 90 个样本对猫探测器进行更深层次的误差分析,以了解该如何改进。
到目前为止,我们关于如何将误差归因于流水线的特定组件的描述是非正式的:查看每个组件的输出,并看看是否可以决定哪个部分出错了。 这种非正式的方法可能就是你所需要的。但在下一章中,你还将看到一种更正式的误差归因方式。