跳到主要内容
返回课程

第 3 周 · 第 3 课 · 50-60 分钟

把模型搞糊涂,再把它改进

找出那些能骗过分类器的边缘情况,在混淆矩阵里读懂它的错误,并提出让它变得更好的改动。

材料
在网页浏览器中打开的这节课 · 纸和笔,或者一个记事应用 · 本课中展示的内置错误集和混淆矩阵
本课
进行中

会自动保存在这台设备上

你将能够做到

  • 针对某个类别,区分假阳性和假阴性。
  • 找出那些很可能让分类器犯糊涂的边缘情况。
  • 读懂混淆矩阵,看清哪些类别被弄混了。
  • 提出一项改动,比如补充样例,来减少某个具体错误。

想一想

一个宠物分类器老是把某只特定的毛茸茸小狗叫作「猫」。而且它每次都很自信。这是随机的倒霉,还是它的错误里其实藏着一个你能找出来并修好的规律?

这节课要做的,是找出分类器错误背后的规律,而不只是注意到它会出错。

做个预测

预测一下:在一个分辨猫、狗、兔子的分类器里,你觉得哪两个类别最常被弄混?为什么?

假阳性
分类器说某样东西属于某个类别,但其实不属于;比如把一张其实是狗的照片叫作「猫」。
假阴性
分类器说某样东西不属于某个类别,但其实属于;比如漏掉一只真正的猫,把它说成狗。
边缘情况
处在两个类别边界附近的不寻常或棘手输入,比如一只看着有点像猫的毛茸茸小狗,很容易被判断错。
混淆矩阵
一张把真实标签与分类器的预测对照排列的表格,让你看清究竟是哪些类别被弄混、又混了多少次。

假阳性与假阴性

并非所有错误都一样。对「猫」而言,假阳性是分类器说了「猫」,但照片并不是猫。对「猫」而言,假阴性是照片确实是猫,分类器却说成了别的。每个类别都有这两种错误。

这个区别很重要,因为两种错误的代价可能天差地别。漏掉一次真正的火警(假阴性)可能远比一次误报(假阳性)严重得多,所以人们往往很在意一个系统会犯哪一类错误。

  • 「猫」的假阳性:一张兔子照片被标成了「猫」。
  • 「猫」的假阴性:一张真正的猫照片被标成了「狗」。
  • 垃圾邮件过滤器把一封真实邮件标成垃圾,就是「垃圾邮件」这一类的假阳性。

边缘情况就落在边界附近

分类器的大部分错误都出在边缘情况上:那些落在两个类别边界附近的不寻常输入。一只毛茸茸的小狗与猫共享一些特征,一只耳朵耷拉着被拍下的兔子失去了关键特征,而一张昏暗模糊的照片把所有类别的特征都藏了起来。

边缘情况并非随机。如果你能预判哪些输入靠近边界,就能预判分类器会在哪里吃力,并针对这些情况去收集更好的样例。

  • 一只无毛猫,缺少通常的毛发质地。
  • 一只穿着服装的狗,身形被遮住了。
  • 一张在极暗光线下拍的照片,颜色和边缘都不清楚。

读懂混淆矩阵,然后改进模型

混淆矩阵把真实标签和预测排成一张网格。对角线上的数字(真实为猫、预测为猫)是答对的;对角线之外的数字是错误,而每一个非对角格子都准确告诉你发生了哪种混淆、发生了多少次。「真实为狗、预测为猫」那格数字很大,就意味着狗经常被误认成猫。

一旦你看清了最大的那个错误,就可以有意识地改进模型。最常见的办法是为那个易混情形补充更多、更好的样例,比如更多毛茸茸小狗的照片,好让分类器学会区分它们的特征。矩阵指向哪里,你就在哪里改进,然后再测一次。

  • 「真实为兔子、预测为猫」那格很大,就说明兔子经常被叫成猫。
  • 补充更清晰的兔子照片,正是针对这个错误。
  • 修改之后,你要重新检查准确率和矩阵,确认那个错误确实变少了。

例题讲解

从一个令人困惑的错误到一次有针对性的修正

  1. 看混淆矩阵,找出对角线之外最大的数字:「真实为兔子、预测为猫」,有 9 次错误。
  2. 说出错误的类型:对猫这个类别来说,这些是假阳性(被叫成猫,其实是兔子);对兔子这个类别来说,这些是假阴性(真兔子被漏掉了)。
  3. 追问为什么:兔子和猫可能共享毛发质地和圆润的外形,而耳朵耷拉着的兔子又失去了那个区分特征,这是典型的边缘情况。
  4. 提出修正方案:往训练集里补充更多兔子照片,尤其是耳朵耷拉着的、以及拍摄角度接近猫的,好让分类器学会两者的差别。
  5. 重新衡量:再测一次,看看「真实为兔子、预测为猫」那格是否变小了,兔子的准确率是否上去了。

要点:在混淆矩阵里找出最大的错误,说清它属于哪一类,解释背后的边缘情况,补充有针对性的样例,然后重新衡量。

宠物分类器的混淆矩阵
预测
实际CatDog兔子
Cat4721
Dog3443
兔子9437

一张针对猫、狗、兔子分类器在测试集上的 3×3 混淆矩阵。行是真实标签,列是预测标签。真实的猫:47 个被预测为猫,2 个为狗,1 个为兔子。真实的狗:3 个猫,44 个狗,3 个兔子。真实的兔子:9 个猫,4 个狗,37 个兔子。对角线(47、44、37)是答对的。最大的错误是「真实为兔子、预测为猫」那格的 9,说明兔子最常被误认成猫,正是准确率图里那个薄弱的兔子类别。

对角线上的格子是答对的;「真实为兔子、预测为猫」那格的 9 是最该修正的错误。

改进最弱的那个类别

之前:训练集里耳朵耷拉着的兔子照片很少,于是许多这样的兔子被预测成猫,兔子的准确率停在 74%。之后:补充了更多兔子照片,尤其是耳朵耷拉着、以及拍摄角度接近猫的边缘情况;分类器学会了两者的差别,「真实为兔子、预测为猫」的错误减少了,兔子的准确率也上去了。这次修正正好瞄准了混淆矩阵所指出的那个错误。

针对最大的那处混淆去补充样例,就是有意识地改进模型的方法。

活动

搞糊涂它,再改进它

试着用边缘情况把分类器搞糊涂,然后通过补充几张多样的训练图片来改进一个薄弱模型,并比较最初的模型和改进后的模型。

  1. 第 1 部分 — 难住模型:先预测它对每张刁钻图片会怎么判,再运行,看看混淆是从哪来的。
  2. 第 2 部分 — 改进它:这个起步模型很弱,只见过圆形和正方形,从没见过三角形。加几张多样的图片,再训练一次。
  3. 对比第一个模型和改进后的模型:哪些修好了、哪些反而坏了,以及原因。

第 1 部分 · 难住模型

每张图片都是已知的边缘情况。先预测模型的答案,再运行。

  • 一个旋转了 45 度的正方形,看上去像菱形。

    Geometric shapes: 一个旋转了 45 度的正方形,看上去像菱形。

    Edge case: 旋转

  • 一个圆形,右半边被一个方块挡住了。

    Geometric shapes: 一个圆形,右半边被一个方块挡住了。

    Edge case: 被遮挡

  • 一个正方形,背景全是杂乱的小斑点。

    Geometric shapes: 一个正方形,背景全是杂乱的小斑点。

    Edge case: 背景不寻常

  • 一个模糊的三角形,边缘柔软发虚。

    Geometric shapes: 一个模糊的三角形,边缘柔软发虚。

    Edge case: 模糊

  • 画面正中间有一个非常小的圆。

    Geometric shapes: 画面正中间有一个非常小的圆。

    Edge case: 非常小

  • 一支很粗的铅笔,看起来更像一根条。

    School supplies: 一支很粗的铅笔,看起来更像一根条。

    Edge case: 特征重叠

  • 一个正方形,一个小圆压在它的一个角上。

    Geometric shapes: 一个正方形,一个小圆压在它的一个角上。

    Edge case: 类别混杂

第 2 部分 · 改进模型

The starter model has only ever seen circles and squares — it has never seen a triangle, so it misses every one. Add up to 4 more varied pictures (try some triangles!) and retrain to see if it improves.

Add pictures (0/4 used)

至少加一张图片,才能做出改进后的模型。

检查你的理解

回答这些题,检验你能否读懂分类器的错误并加以改进。

  1. Question 1. 对「猫」这个类别来说,这属于哪一类错误?

    一张照片其实是兔子,但分类器预测为「猫」。

  2. Question 2. 针对混淆矩阵揭示出的某个具体错误,下面哪些是好的减少办法?选出所有符合的。

    把符合的都选上。

  3. Question 3. 判断这句话是对还是错。

    在混淆矩阵中,对角线上的数字是预测正确的部分。

已回答 0 / 3

自己动手试试

追猎那处混淆

挑一对你预计分类器会弄混的类别,并规划你会如何找出并修正这处混淆。

  1. 选两个相似的类别(例如玛芬和纸杯蛋糕,或者狼和狗)。
  2. 描述一个位于边界附近的边缘情况,并预测它对每个类别来说会变成假阳性还是假阴性。
  3. 说出混淆矩阵中哪一格会变大,以及你会补充哪些样例来让它变小。

做到这样就算成功

  • 一对可信的易混类别,并配有一个边界上的边缘情况。
  • 把错误正确地判定为假阳性或假阴性。
  • 一项有针对性的修正,并与混淆矩阵中某个具体格子相对应。

反思

输入时会保存在这台设备上

请不要写私人信息。你的回答只保存在这个浏览器里,不会发送到任何地方。

小结

混淆矩阵准确显示出分类器把哪些类别弄混了,边缘情况则解释了为什么;你可以补充有针对性的样例并重新衡量,从而改进模型。

  • 假阳性和假阴性是两种不同的错误,代价也不同。
  • 类别边界附近的边缘情况造成了大部分混淆。
  • 读懂混淆矩阵,为最大的错误补充样例,然后重新衡量。

七至八年级延伸内容

你宁愿犯哪一种错?

对许多真实系统来说,你没法把错误全部消除,所以设计者会选择更愿意偏向哪一种。医学筛查工具可能宁愿接受更多假阳性(多做几次检查),以避免假阴性(漏掉一种疾病);而垃圾邮件过滤器可能宁愿接受更多假阴性(放过一些垃圾邮件),以避免假阳性(丢掉一封真实邮件)。

挑一个真实的分类器,论证它最该避免哪一种错误。它的制作者可以如何调整模型或它的判定阈值,来用一种错误换取另一种?

完成这一课

  • Attempt the knowledge check(未完成)
  • Save a reflection (recommended)(未完成)

先做一下知识检查,才能完成这一课。