跳到主要内容
返回课程

第 2 周 · 第 2 课 · 45-55 分钟

训练数据与测试数据

看看为什么要用一组样例来教模型、再用另一组来检验它,以及用没见过的样例来测试,是如何衡量它是否真的学到了规律的。

材料
在网页浏览器中打开的这节课 · 纸和笔,或者一个记事应用 · 本课中内置的动物数据集
本课
进行中

会自动保存在这台设备上

你将能够做到

  • 说明训练数据和测试数据的区别。
  • 描述为什么必须用模型没学过的样例来测试它。
  • 给泛化和准确率下定义,并把它们和测试联系起来。

想一想

老师发下一张练习题,随后又出了一场小测验,题目和答案跟练习题一模一样。如果所有人都拿了 100 分,这能证明他们学会了内容吗,还是只说明他们背下了那些答案?

记住这一点:用模型学过的那些样例去检验它,会遇到同样的问题。

做个预测

预测一下:如果你只用模型训练时用过的那些样例来测试它,得分能告诉你它面对全新样例时表现如何吗?

训练
给模型看大量带标签的样例,让它学出把特征和某个类别联系起来的规律。
测试
用模型没学过的、带标签的新样例来检验它,看看它究竟表现如何。
训练数据
模型在训练过程中用来学习的那些样例。
测试数据
另外单独的一组样例,从训练中留出来,只用于检验模型。
泛化
模型在从未见过的新样例上表现得有多好,而不只是在它学过的那些样例上。
准确率
模型正确标注的测试样例所占的比例,常写成分数或百分数。

训练:从样例中学出规律

训练是模型查看大量带标签的样例、并学出一条把特征和类别联系起来的规律的那个步骤。用于此的样例就是训练数据。

在训练过程中,模型既能看到每个样例的特征,也能看到它的正确标签,因此它可以不断调整,直到自己的判断大体上与标签一致。

  • 给模型看 100 行带标签的动物数据,让它学出「有翅膀通常意味着鸟」
  • 把成千上万封已标记为垃圾或非垃圾的邮件喂给一个垃圾邮件过滤器

测试:用没见过的样例做一次公平检验

如果你只用模型学过的那些样例来检验它,它完全可能只是复述已经背下的答案,就像一个学生被考了他练过的那张一模一样的练习题。那证明不了它学到了任何有用的东西。

所以我们会留出一部分样例作为测试数据。模型绝不会用它们来训练。测试的意思,就是把模型跑在这组单独的、没见过的数据上,再把它的判断和真实标签作比较。那才是对它真正学到了什么的公平检验。

  • 留出 20 行动物数据;用另外 80 行训练;然后用留出的那 20 行来测试
  • 一份用来复习的练习题,和一场用来评分的单独测验

泛化与准确率

泛化是指模型在从未见过的新样例上表现得有多好。泛化得好的模型,学到的是真正的规律,而不只是训练时那些具体的行。用没见过的数据来测试,正是我们衡量泛化能力的方式。

准确率是这次检验的一个简单分数:在全部测试样例中,模型标注正确的占多大比例?如果它把 20 个测试动物中的 18 个标对了,准确率就是 18/20,也就是 90%。在没见过的测试数据上准确率高,才是模型真正会泛化的标志。

  • 20 个测试样例中对了 16 个 → 准确率 80%
  • 在训练数据上得分很高、在测试数据上得分很低的模型,没有实现泛化

例题讲解

把 20 个动物分成训练集和测试集

  1. 先有一个含 20 个带标签动物的数据集(每一行都有特征,以及「是鸟」或「不是鸟」的标签)。
  2. 拆分:把 15 行放进训练集,留出 5 行作为测试集。
  3. 训练:只用那 15 行训练数据,让模型学出规律。
  4. 测试:把留出的 5 行去掉标签给模型看,并记录它的判断。
  5. 计算准确率:把它的 5 个判断和真实标签作比较。如果对了 4 个,准确率就是 4/5,也就是 80%,这衡量了它泛化得有多好。

要点:用一部分数据训练,用留出的另一部分测试,并在没见过的那部分上计算准确率,以此判断泛化能力。

先拆分数据,再做检验

两个阶段。阶段 1(训练):训练数据,也就是大部分行,流入模型,模型从中学出一条规律。阶段 2(测试):留出的测试数据流入,这些数据模型从未见过;把模型的判断与真实标签比较,得出准确率。关键在于:测试用的那些行始终与训练完全分开。

模型从训练数据中学习,并用另外单独的测试数据来评分。

同一个模型,两个分数

一张条形图,用百分比对比同一个模型在训练所用数据上和在没见过的测试数据上的准确率。第 1 条「在训练数据上」为 98%。第 2 条「在没见过的测试数据上」为 82%。测试分数才是衡量模型泛化能力的诚实指标;测试那条明显偏低,就是在提醒你这个模型主要是在死记硬背。

活动

训练、测试,并改动数据

把一个太空水果数据集拆成训练集和测试集,运行一个透明的模型,再试验均衡、不均衡和标签错误的数据会如何改变结果。

  1. 把这 16 颗水果分成训练集(用来学习)和测试集(留出来检验模型)。
  2. 每颗水果只能进一个集合。测试集里两类都要留一些。
  3. 运行模型,看看准确率,然后试试下面三个数据实验。

给每颗水果分组

训练集

12

可以吃: 6 · 不能吃: 6

测试集(留出来的)

4

可以吃: 2 · 不能吃: 2

十六颗太空水果。每一颗都有一个开关,用来把它放进训练集或测试集,旁边还显示它的正确标签。
水果正确标签放进哪个集合?
晨曦莓一颗 10 厘米的深红圆形水果,表皮光滑,有 6 颗种子,甜度 8/10,发光等级 0/5,生长在林冠。 可以吃
沙李一颗 8 厘米的琥珀椭圆形水果,表皮凹凸,有 4 颗种子,甜度 7/10,发光等级 1/5,生长在沙丘。 可以吃
潮汐果一颗 12 厘米的青绿圆形水果,表皮毛茸茸,有 8 颗种子,甜度 9/10,发光等级 0/5,生长在礁石。 可以吃
余烬梨一颗 9 厘米的深红椭圆形水果,表皮光滑,有 5 颗种子,甜度 6/10,发光等级 2/5,生长在林冠。 可以吃
沙丘滴一颗 7 厘米的琥珀圆形水果,表皮凹凸,有 3 颗种子,甜度 7/10,发光等级 1/5,生长在沙丘。 可以吃
林冠无花果一颗 11 厘米的青绿椭圆形水果,表皮毛茸茸,有 7 颗种子,甜度 8/10,发光等级 0/5,生长在林冠。 可以吃
红葫芦一颗 10 厘米的深红圆形水果,表皮光滑,有 6 颗种子,甜度 5/10,发光等级 2/5,生长在沙丘。 可以吃
礁李一颗 8 厘米的琥珀椭圆形水果,表皮毛茸茸,有 4 颗种子,甜度 9/10,发光等级 1/5,生长在礁石。 可以吃
星焰一颗 5 厘米的紫罗兰星形水果,表皮带刺,有 2 颗种子,甜度 3/10,发光等级 4/5,生长在陨石坑。 不能吃
光螺一颗 4 厘米的天蓝螺旋形水果,表皮凹凸,有 1 颗种子,甜度 2/10,发光等级 5/5,生长在洞窟。 不能吃
亮星一颗 6 厘米的紫罗兰星形水果,表皮光滑,有 0 颗种子,甜度 4/10,发光等级 3/5,生长在陨石坑。 不能吃
荆星一颗 5 厘米的天蓝星形水果,表皮带刺,有 3 颗种子,甜度 2/10,发光等级 2/5,生长在洞窟。 不能吃
尖刺螺一颗 4 厘米的紫罗兰螺旋形水果,表皮带刺,有 1 颗种子,甜度 3/10,发光等级 1/5,生长在陨石坑。 不能吃
洞窟辉一颗 7 厘米的天蓝星形水果,表皮凹凸,有 2 颗种子,甜度 1/10,发光等级 4/5,生长在洞窟。 不能吃
虚空星一颗 5 厘米的紫罗兰螺旋形水果,表皮光滑,有 0 颗种子,甜度 3/10,发光等级 5/5,生长在陨石坑。 不能吃
倒刺星一颗 6 厘米的天蓝星形水果,表皮带刺,有 4 颗种子,甜度 2/10,发光等级 3/5,生长在洞窟。 不能吃

实验:改数据,测试保持不变

每个实验都用不同版本的数据训练,但都在同样的那 8 颗留出的测试水果上检验。先预测会发生什么,再运行。

A · 均衡且正确的数据

全部 24 个样本,可以吃和不能吃各占一半,所有标签都正确。这是公平的起点。

先写下一个预测。

B · 不均衡的数据

所有「可以吃」的样本都在,但「不能吃」只有 2 个,模型几乎见不到这一类。

先写下一个预测。

C · 标签错误的数据

同样的 24 个样本,但其中 5 个的标签被翻成了错的。

先写下一个预测。

这是一个简化的课堂模型(k 近邻)。它把新水果和最相似的训练水果比较,然后照抄出现最多的那个标签。真实的 AI 系统要大得多,但关于「好数据」的道理是一样的。这条虚构的规则是:如果一颗太空水果发光很强(发光等级 3 或以上),或者带刺,那它就不能吃。否则就可以吃。

检查你的理解

回答这些题,检验你是否理解了训练、测试和准确率。

  1. Question 1. 我们为什么要用模型没训练过的样例去测试它?

  2. Question 2. 谁的测验结果才是对学习成果的公平衡量?

    艾娃复习了一张练习题,随后被考了同一类型但全新的题目。本复习了一张练习题,随后被考了一模一样的题目,而且练习时答案就摆在他面前。

  3. Question 3. 一个模型把 20 个测试样例中的 15 个标注正确。它的准确率是多少?

已回答 0 / 3

自己动手试试

设计一次公平的测试

为一个把消息分成「是问句」或「不是问句」的模型,设计一套公平的训练与测试方案。

  1. 决定你总共要收集多少条示例消息。
  2. 选择如何把它们分成训练集和测试集,并说明理由。
  3. 说明你会如何根据测试结果计算准确率。

做到这样就算成功

  • 有明确的样例总数,以及训练集与测试集的划分。
  • 说明了测试集为什么要与训练分开。
  • 正确描述了准确率的计算方式。

反思

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

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

小结

模型用一组样例训练,再用另一组从未见过的样例测试;在那组测试数据上的准确率,衡量的是模型的泛化能力。

  • 训练数据教会模型;测试数据检验模型。
  • 测试用的那些行必须留出来,训练时绝不能看到。
  • 泛化是指在新样例上表现良好;准确率是测试样例中标注正确的比例。

七至八年级延伸内容

当训练看着很棒、测试却很糟

有时候模型在训练数据上几乎满分,在测试数据上却很差。这通常意味着它把训练数据中那些具体的行背了下来,而没有学到普遍的规律。

描述一种可能发生这种情况的例子,比如一个靠精确重量把特定水果记下来的模型。你可以改变数据或划分方式中的什么,来更诚实地看清它的真实表现?

完成这一课

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

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